问题背景
今天遇见了使用JSch连接服务器时,报错Exception:Algorithm negotiation fail的问题!(sftp连接麒麟v10系统提示报错报错)

问题原因
问题原因在于,JSch所支持的加密算法与服务器端ssh支持的加密算法不一致,导致算法通信失败。

解决办法
1. 修改JSch连接代码
修改代码,显式指定加密算法:

JSch jsch = new JSch();
Session session = null;
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.setConfig("PreferredAuthentications", "publickey,password");
session.setConfig("PubkeyAcceptedAlgorithms", "ssh-rsa,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521");
session.connect(5000);
session.disconnect();


上面列的ssh-rsa,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521都是相对安全的加密算法。

2. 修改服务器端的sshd_config
找到/etc/ssh/sshd_config文件,打开之后,在最后增加这样一句:

HostKeyAlgorithms ssh-rsa,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521


这一句是为服务器指定可用的ssh连接加密算法。
然后使用sudo systemctl restart sshd命令重启sshd。

3. 尝试重连
然后我们继续尝试连接,就会发现能够连接成功啦!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐