我在我的程序中使用jsch-0.1.51.jar进行sftp连接,并且它在过去1年中工作正常,但突然程序开始抛出错误:
Algorithm negotiation fail. Below code:
=========================================
jsch.addIdentity(sftpIdentityFilePath);
logger.info("*****************Getting SFTP Connection******************");
session = jsch.getSession(sftpUser, sftpHost, 2222);
System.out.println("crossed seesion initialize");
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("crossed seesion config");
session.connect();
System.out.println("crossed seesion connect");
channel= session.openChannel("sftp");
System.out.println("sftp server connected");
logger.info("SFTP server connected");
channel.connect();
logger.info("*****************SFTP Connected******************");
==============================================================
找到问题后,我使用了更新的jar来jsch-0.1.54.jar。但它引发了一个不同的例外
2018-04-28 18:17:51 ERROR FileCopyMain:978 -
Session.connect: java.io.IOException: End of IO Stream Read
同样在这两种情况下,当我尝试从Eclipse IDE运行该程序时,它运行正常。但是当我创建这个Java代码的jar文件时,我遇到了这些问题。
此SFTP连接代码的上下文:我使用私钥连接服务器以将文件下载到本地
有些人可以帮我解决这个问题吗?
答案 0 :(得分:1)
算法协商失败。
这意味着客户端和服务器端无法就用于保持SSH连接安全的加密算法达成一致。发生这种情况时,服务器端将关闭连接,从而导致您看到的IOException。
最可能的解释是客户端SSH实现已过期,或者服务器端SSH实现已过期。在jcsh" DEBUG"中应该有一些线索。记录;见JSch logger - where can I configure the level。如果失败,请查看服务器端的日志。
解决方案取决于您的发现。