为什么这个SSH客户端使用“zDonez”?

时间:2011-09-06 12:23:23

标签: java sftp jsch

我正在开发一个应用程序,它将使用JSch通过SFTP在服务器上获取文件。

没有太多文档,但我发现这篇(法语)博客文章:Un client SSH pour Java

我可以弄清楚TERMINATOR变量的用途:

private static final String TERMINATOR = "zDonez";  

为什么这会使用"zDonez"

2 个答案:

答案 0 :(得分:2)

“zDonez”是一个任意字符串,不会出现在您运行的任何命令的输出中。如果是,则需要为TERMINATOR选择另一个值。 它的目的是检测命令何时完成运行。

答案 1 :(得分:1)

正如Klas所说,在这种情况下,zDonez只是一个字符串,在执行原始命令后将由远程shell打印。

command += "; echo \"" + TERMINATOR + "\" \n";

通过这种方式,getServerResponse()方法可以知道命令何时完成,并返回正确的字符串。

我想说这不是shell频道类型的最佳用法,它只应用于交互式使用,即当用户在那里决定何时输入下一个命令时。 (大多数炮弹因此而提示。)

更好的方法是为每个命令(或一系列命令)使用单独的exec通道,但是您不能使用cd或类似的状态更改命令,因为每个exec渠道将拥有自己的外壳。


对于SFTP,您根本不需要执行远程命令 - 使用ChannelSftp而不是execshell频道。默认的JSch发行版中有Sftp示例,其中显示了如何使用此类支持的任何操作。

更多常规文档位于JSch Manual in the wiki

(免责声明:我写了inofficial JSch Javadoc(根据官方消息来源),以及维基手册中的大部分内容。