我正在尝试 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 到服务器。
事实证明,这些
-cbc
算法很容易受到攻击。因此,最新版本的 OpenSSH 现在将默认拒绝这些算法:目前,如果您需要它们,它们仍然可用,但正如您所发现的,您必须明确启用它们。最初发现漏洞时(在 2008 年末,将近 10 年前!)为了兼容性,这些算法只是放在优先级列表的末尾,但现在它们在 SSH 中的弃用已经达到了这些算法的阶段默认禁用。根据Cryptography.SE 中的这个问题,这个弃用步骤已经在 2014 年发生。
如果可能的话,请考虑这是一个温和的提醒,以更新您的 SSH 服务器。(如果它是基于固件的实现,请查看更新的固件是否适用于您的硬件。)
在 ~/.ssh/config 中创建一个文件并粘贴到下面的内容
您可以从位于以下位置的文件更新您的 ssh 配置:/etc/ssh/ssh_config
sudo nano /etc/ssh/ssh_config
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
Ctrl + X
。按 Enter 保存并退出。与 OP 相同的问题困扰了我很长时间,在 Synology 服务器上也是如此,这
ssh -c aes256-cbc diskstation.local
是一个有用的权宜之计。但是知道自己的服务器使用过时的密码并不能真正让人放心。真正的解决方案不是像我多年来天真地知道的那样等待 Synology 更新固件(或至少不仅如此),而是检查服务器的配置。允许的密码隐藏在Terminal & SNMP>Advanced parameters后面。选择任何东西都可以使用更现代的密码,而除了低安全性之外的任何东西都会使
-cbc
密码失效。