使用JSch连接到SFTP服务器时“收到的消息太长”

时间:2015-08-31 06:45:34

标签: java sftp jsch

我想从服务器使用FTP下载文件。我可以通过命令行正确地完成它,并希望使用Java做同样的事情。这是我的代码

session = jsch.getSession(user, server, 22);
session.setPassword(pass);
session.setTimeout(10000);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
ChannelSftp channel = (ChannelSftp) session.openChannel("sftp");
**channel.connect();**
channel.disconnect();
session.disconnect();

问题是频道正在连接,即channel.connect,我收到错误:

com.jcraft.jsch.JSchException: 4: Received message is too long: 1619214428
    at com.jcraft.jsch.ChannelSftp.start(ChannelSftp.java:242)
    at com.jcraft.jsch.Channel.connect(Channel.java:200)
    at com.jcraft.jsch.Channel.connect(Channel.java:144)
    at com.cca.processor.FTPProcessor.main(FTPProcessor.java:54)
Caused by: 4: Received message is too long: 1619214428
    at com.jcraft.jsch.ChannelSftp.start(ChannelSftp.java:214)
    ... 3 more

1 个答案:

答案 0 :(得分:2)

正如您自己评论的那样,您无法连接任何SFTP客户端。

因此,您的JSch / Java代码没有任何问题。

仅在启用SFTP会话时进行SSH身份验证后才会出现此错误。

它通常是由某些启动shell脚本打印消息引起的,从而破坏了SFTP协议。

错误中的数字(1619214428)是消息中被解释为32位数字的前四个字符。

但在你的情况下,它似乎并不是一个可读的文本(如果它,WinSCP也会显示可读的形式)。该数字代表{16}的十六进制表示法,‭6083405C‬(其中点代表ASCII表外的字符)。

另请参阅WinSCP文档以获取错误消息:
https://winscp.net/eng/docs/message_large_packet

但是,它是破坏的服务器,而不是你的代码。您应该联系您的服务器管理员或查看您帐户的启动shell脚本。

虽然您声称可以从命令行和WinSCP使用FTP。所以也许你应该使用FTP(或更好的FTPS),而不是SFTP。您不能将JSch用于FTP(或FTPS)。例如,您可以使用Apache Commons FTPClient