jsch连接sftp失败问题

jsch是一个纯java实现的sftp工具包,因为历史版本原因,很多机器使用的Jsch包比较陈旧。但是服务端ssh服务可能升级到6.7以上,特别是7.0以上,服务端默认会关闭安全性较低的密钥协商算法,从而导致协商无法成功,sftp连接建立失败。

这就是为什么手工执行 sftp [email protected] 可以免密登录,而程序会一直失败,因为走的是两条不同的路径。

相关的报错信息可能类似:

no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

解放方案一、服务端修改sshd_config配置文件

/etc/ssh/sshd_config最后添加:
KexAlgorithms +diffie-hellman-group1-sha1

#然后重启ssh服务
# service sshd restart

解决方案二、客户端下载并升级Java密码学扩展JCE。或者JDK直接升级到1.8。
如何升级JCE,请参考 https://www.cnblogs.com/husbandmen/articles/7096120.html

解决方案三、jsch包更新到0.1.54版本以上,并且在代码中设置:

your Method {
session.setConfig("StrictHostKeyChecking", "no");// That solve the problem
 }
//如果您需要此Java版本,则此代码可在Java 1.5或更高版本中使用。

你可能感兴趣的:(jsch连接sftp失败问题)