JSch导致数据包大小超过允许的最大错误

时间:2013-05-31 00:23:55

标签: java coldfusion ssh jsch

我正在尝试使用JSch类(Java Secure Channel; 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服务器不会出错。有关代码出错的提示或下一步要进行故障排除的提示吗?

1 个答案:

答案 0 :(得分:0)

SSH Protocol Error: packet size exceeds maximum allowed

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

  1. 您的.bashrc,.bash_profile或服务器上类似的shell配置文件设置为打印一些消息。
  2. 服务器配置不当,并且发送了某种问候语。
  3. 服务器正在发送某种错误消息。
  4. 如果您可以访问ssh命令行实用程序,则可以使用它来查看服务器正在发送的内容。运行这样的事情:

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

    这将打开到远程服务器的普通SSH会话并请求SFTP子系统,这与SFTP客户端将执行的操作相同。如果服务器正确启动SFTP,您将无法看到此命令的任何输出 - 它只会等到您终止它。如果您看到远程服务器中的任何文本,那就是问题所在。您需要弄清楚服务器发送该文本的原因并阻止它。