JSch引起的数据包大小超过允许的最大错误。

4

我正在尝试使用JSch类(Java安全通道; jsch-0.1.50.jar)连接到SFTP服务器并在ColdFusion(9.0.2)应用程序内发送文件(其运行在Java 1.7.0_15上)。 相关的基本代码如下:

jsch = classLoader.create("com.jcraft.jsch.JSch").init(); // ColdFusion-specific to load the jar
jschSession = jsch.getSession("myusername", "ftp.example.com", 22);
jschSession.setConfig("StrictHostKeyChecking", "no");
jschSession.setTimeout(60000);
jschSession.setPassword("mypassword");
jschSession.connect();

当连接到Serv-U SFTP服务器时,一旦连接打开,它会立即在Serv-U端给我以下错误:

SSH Protocol Error: packet size exceeds maximum allowed.

Serv-U随后关闭会话,此时JSch会抛出异常:

Session.connect: java.io.IOException: End of IO Stream Read

我对JSch类很新,也许我错过了一些明显的东西,但是我不知道错误可能出现在哪里。使用WinSCP从相同的起点连接到相同的SFTP服务器没有错误。您有什么提示代码做错了或者下一步的故障排除应该在哪里进行?


请查看以下链接,看看是否有所帮助 - https://dev59.com/lXI-5IYBdhLWcg3wI0p9#14457797 - Vishnu Prasad Kallummel
1个回答

0
SSH Protocol Error: packet size exceeds maximum allowed

这意味着本地客户端从远程服务器接收到的一些数据没有正确格式化为SFTP协议消息。通常的原因是服务器通过SSH连接发送了某种纯文本消息。可能会发生以下几种情况:

  1. 您在服务器上的 .bashrc、.bash_profile 或类似的 shell 配置文件设置为打印某些消息。
  2. 服务器配置不良,发送某种问候语。
  3. 服务器正在发送某种错误消息。

如果您可以访问 ssh 命令行工具,则可以使用该工具查看服务器发送的内容。运行类似于以下内容的命令:

$ ssh myusername@ftp.example.com -s sftp

这将打开一个普通的SSH会话到远程服务器并请求SFTP子系统,这与SFTP客户端所做的相同。如果服务器正确启动了SFTP,则您将看不到此命令的任何输出--它只会等待直到您终止它。如果您从远程服务器看到任何文本,则可能存在问题。您需要弄清楚服务器为什么发送该文本并防止它。


感谢您尝试回答这个旧问题。很久以前我用了完全不同的解决方案,但在这种情况下,错误是在服务器端而不是客户端显示出来的。我能够使用任何其他SCP客户端正常连接到服务器,这消除了服务器端问题的可能性,仅此客户端库会扔出一些它不应该扔出的内容,所以我放弃并改用WinSCP编写脚本。 - Justin Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接