我正在尝试使用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服务器不会出错。有关代码出错的提示或下一步要进行故障排除的提示吗?
答案 0 :(得分:0)
SSH Protocol Error: packet size exceeds maximum allowed
这意味着本地客户端从远程服务器接收到一些数据,这些数据未正确格式化为SFTP协议消息。通常的原因是服务器通过SSH连接发送了某种纯文本消息。可能发生的事情很少:
如果您可以访问ssh
命令行实用程序,则可以使用它来查看服务器正在发送的内容。运行这样的事情:
$ ssh myusername@ftp.example.com -s sftp
这将打开到远程服务器的普通SSH会话并请求SFTP子系统,这与SFTP客户端将执行的操作相同。如果服务器正确启动SFTP,您将无法看到此命令的任何输出 - 它只会等到您终止它。如果您看到远程服务器中的任何文本,那就是问题所在。您需要弄清楚服务器发送该文本的原因并阻止它。