ssh client 报 algorithm negotiation failed的解决方法
在部署服务器后,服务器控制台可正常登陆,使用shell也可以正常连接,但是上传时就提示出错:algorithm negotiation fail。
错误原因:
这个问题是因为ssh客户端远程连接服务器之间的加密算法不一致导致的
解决办法:
使用其他终端(比如XSHELL、WINSCP等)登录服务器,修改ssh配置文件
ssh client 报 algorithm negotiation failed的解决方法之一 修改sshd的配置文件 /etc/ssh/sshd_config 在配置文件中添加: Ciphers aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,3des-cbc,arcfour128,arcfour
ssh client 报 algorithm negotiation failed的解决方法之一
修改sshd的配置文件 /etc/ssh/sshd_config
1、编辑/etc/ssh/sshd_config 在配置文件最尾端添加以下信息
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,3des-cbc,arcfour128,arcfour256,arcfour,blowfish-cbc,cast128-cbc
MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96
KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,curve25519-sha256@libssh.org
2、修改完毕后保存退出命令 :wq
3、重启ssh服务
CentOS 7命令:systemctl restart sshd.service
CentOS 6命令:service sshd restart
--------------------------------------------------------------------------------------
项目过程中曾经遇到这样一个错误: SFTP ERROR?Algorithm negotiation fail 。 J ava 代码利用SFTP上传客户服务器报错,但是可以在Linux上上传成功,尝试过很多解决方案都不行,最后发现jsch版本需要升级, JSCH版本过低,不支持最新版本OpenSSL导致的。 将项目中jsch的jar包版本从 jschjsch-0.1.42.jar 升级到 jsch-0.1.53.jar,问题得以解决。
————————————————
版权声明:本文为CSDN博主「XiaoBenDanXY」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/XiaoBenDanXY/article/details/51200515
-----------------------------------------------------------------------------------------
OpenSSH8.0对应jsch jar包版本
由于连接sftp所用jar最终会使用jsch的包。然而jsch的包会有各种版本问题。来梳理一下,
根源是jdk1.6支持的加密算法较少(jdk8支持了大多数加密算法),而openSSH8.0默认屏蔽了jdk1.6支持的加密算法,如:diffie-hellman-group1-sha1等。openSSH7的版本能支持1.6的算法。
首先查看主机ssh命令,执行ssh -v
因为一台主机可能放多个项目,那么不能换全局的jdk。每个项目可以指定jdk启动,在tomcat的bin目录下setclasspath.sh,和catalina.sh中增加
export JAVA_HOME=/ecp_web/jdk1.8/jdk1.8.0_171(jdk路径)
export JRE_HOME=/ecp_web/jdk1.8/jdk1.8.0_171/jre(jre路径)
jdk1.6+OpenSSH8.0+jsch1.0.50.jar(不行,最原始版本)
OpenSSH8.0对应的jsch包应该在52版本或者更高
jdk1.6+OpenSSH8.0+jsch1.0.52.jar(有解决方案。网上说法,未亲测)
修改/etc/ssh/sshd_config文件,增加sshd的算法配置。
KexAlgorithms +diffie-hellman-group1-sha1
jdk1.6+OpenSSH8.0+jsch1.0.53.jar(有解决方案。)
在2的基础上,代码增加
Properties sshConfig = new Properties();
sshConfig.put("kex", "diffie-hellman-group1-sha1");
jdk1.7+OpenSSH8.0+jsch1.0.52.jar(不行)
jdk1.8+OpenSSH8.0+jsch1.0.52.jar(亲测可行)
总结:当ssh版本做了大的升级后,需要对应的jsch包做升级。Jdk也要做升级。但考虑到整体项目的编译情况,建议不要换用jdk。而是取2方案。
————————————————
版权声明:本文为CSDN博主「185的阿平」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42740540/article/details/103758324