gpt4 book ai didi

java - 使用 JSch 连接到 SFTP 服务器时为 "Received message is too long"

转载 作者:行者123 更新时间:2023-11-30 03:17:06 25 4
gpt4 key购买 nike

我想使用 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 连接时,即 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

最佳答案

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

所以您的 JSch/Java 代码没有任何问题。

<小时/>

该错误仅在 SSH 身份验证后、SFTP session 启动时发生。

这通常是由某些启动 shell 脚本打印消息导致的,从而破坏了 SFTP 协议(protocol)。

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

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

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

<小时/>

不过,损坏的是服务器,而不是您的代码。您应该联系您的服务器管理员或检查您帐户的启动 shell 脚本。

<小时/>

尽管您声称您能够从命令行和 WinSCP 使用 FTP。因此,也许您实际上应该使用 FTP(或更好的 FTPS),而不是 SFTP。您不能将 JSch 用于 FTP(或 FTPS)。您可以使用Apache Commons FTPClient 例如。

关于java - 使用 JSch 连接到 SFTP 服务器时为 "Received message is too long",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32305323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com