我正在尝试SSH到远程计算机,尝试失败:
$ ssh -vvv admin@192.168.100.14
OpenSSH_7.7p1, OpenSSL 1.0.2o 27 Mar 2018
.....
debug2: ciphers ctos: aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
debug2: ciphers stoc: aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,zlib@openssh.com
debug2: compression stoc: none,zlib@openssh.com
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: rsa-sha2-512
Unable to negotiate with 192.168.100.14 port 22: no matching cipher found. Their offer: aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
据我了解日志的最后一个字符串,该服务器提供使用的以下4种加密算法之一:aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
。看起来我的ssh客户端不支持任何一个,因此服务器和客户端无法进一步协商。
但是我的客户确实支持所有建议的算法:
$ ssh -Q cipher
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
rijndael-cbc@lysator.liu.se
aes128-ctr
... and there are several more.
如果我明确指定算法如下:
ssh -vvv -c aes256-cbc admin@192.168.100.14
我可以成功登录服务器。
My ~/.ssh/config
不包含任何与密码相关的指令(实际上我已将其完全删除,但问题仍然存在)。
那么,为什么没有我的明确指示,客户端和服务器就无法决定使用哪种密码?客户了解服务器支持aes256-cbc
,客户了解他可以自己使用它,为什么不仅仅使用它呢?
一些附加说明:
大约一个月前(一个月)没有这种问题。从那以后,我没有更改任何ssh配置文件。我确实更新了已安装的软件包。
有一个描述非常相似的问题的问题,但我的问题没有答案:ssh无法协商-未找到匹配的密钥交换方法
更新:问题已解决
正如telcoM解释的那样,问题出在服务器上:它只建议使用过时的密码算法。我确定客户端和服务器都没有过时。我已登录服务器(顺便说一下,它是Synology,已更新为最新的可用版本),并检查了/etc/ssh/sshd_config
。该文件的第一行(!)行是:
Ciphers aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
这非常奇怪(事实上,该行位于文件的第一行),我确定我之前从未接触过该文件。但是我将行更改为:
Ciphers aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc
重新启动服务器(不知道sshd
仅如何重新启动服务),现在问题消失了:我可以像往常一样ssh到服务器。