我正在尝试 ssh 到远程机器,尝试失败:
$ ssh -vvv [email protected]
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: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,[email protected]
debug2: compression stoc: none,[email protected]
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
[email protected]
aes128-ctr
... and there are several more.
如果我明确指定这样的算法:
ssh -vvv -c aes256-cbc [email protected]
我可以成功登录到服务器。
我的~/.ssh/config
不包含任何与密码相关的指令(实际上我完全删除了它,但问题仍然存在)。
那么,为什么客户端和服务器在没有我明确指示的情况下无法决定使用哪个密码呢?客户端知道服务器支持aes256-cbc
,客户端知道自己可以使用,为什么不直接使用呢?
一些附加说明:
一段时间(大约一个月)前没有这样的问题。从那以后,我没有更改任何 ssh 配置文件。我确实更新了已安装的软件包。
有一个问题描述了非常相似的问题,但没有回答我的问题:ssh 无法协商 - 找不到匹配的密钥交换方法
更新:问题已解决
正如电信公司解释的那样,问题出在服务器上:它只建议使用过时的密码算法。我确信客户端和服务器都没有过时。我已经登录到服务器(顺便说一下,它是 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 到服务器。