4

我正在尝试使用 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 服务器不会出现错误。关于代码做错了什么或下一步在哪里进行故障排除的任何提示?

4

1 回答 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,您将不会看到此命令的任何输出——它只会等到您将其杀死。如果您看到来自远程服务器的任何文本,那就是问题所在。您需要弄清楚服务器为什么要发送该文本并阻止它。

于 2017-12-02T15:30:05.130 回答