java - .JSchException : Packet corrupt 异常

标签 java linux ssh jsch

我在 RHEl 6 上使用 Jsch 0.1.51 和 Jdk 1.7_51。在与远程机器进行 session 时出现异常:

com.jcraft.jsch.JSchException: Packet corrupt
        at com.jcraft.jsch.Session.start_discard(Session.java:1049)
        at com.jcraft.jsch.Session.read(Session.java:919)
        at com.jcraft.jsch.UserAuthNone.start(UserAuthNone.java:56)
        at com.jcraft.jsch.Session.connect(Session.java:389)
        at com.jcraft.jsch.Session.connect(Session.java:183)
        at TestSFTP.checkException(TestSFTP.java:130)
        at TestSFTP.moveFileToDir(TestSFTP.java:78)
        at TestSFTP.main(TestSFTP.java:73)

相同的代码在 RHEL 5 上运行良好。任何人都可以提供一些建议..谢谢

使用的代码是:

Session   session     = null;
ChannelSftp channelSftp = null;
JSch jsch = new JSch();

session = jsch.getSession(this.sftpUser,this.sftpHost,this.sftpPort);

Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setPassword(this.sftpPassword);
session.connect();
channelSftp = (ChannelSftp)session.openChannel("sftp");
channelSftp.connect();

我在 session.connect() 中遇到错误;

最佳答案

如果您尝试连接一个已经存在的 session ,就会发生此异常。解决方法是关闭 session ,然后开始新 session 。这对我有帮助。从此站点找到了一些帮助:

http://flyingjxswithjava.blogspot.com/2015/03/comjcraftjschjschexception-packet.html

引用网站的要点来理解问题:

  • 当 Session 在循环中被重复使用时会发生此异常,其中 Session 有意断开或由于超时而需要重新连接。

  • 之所以会抛出这样的异常,是因为Session第一次连接到远程站点时,会为该session生成一个名为Packet的随机数。

  • 当线程 hibernate 1 小时时,由于一段时间内没有 Activity , session 会自动断开连接。

  • 当 session 断开时,数据包丢失。

  • Session尝试重连时,找不到Packet,抛出异常。

关于java - .JSchException : Packet corrupt 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27838523/

相关文章:

java - 寻找 JSON 中的最大/最小值

java - 处理多部分/表单数据输入

ssh - 为什么我的 SSH key 无法连接到 github?

linux - 使用 mmap 的 Emacs 缓冲区分配

Linux 服务器,定位只包含 4 个特定行的文件

networking - 如何使用本地运行的emacs访问远程文件?

java - 持有资料 list

java - 在 Java 中整齐地格式化 arraylist 的输出列

检查 LAN 是否已插入

linux - 用于注释/取消注释文件中行的 Bash 脚本