ssh无法协商-找不到匹配的密钥交换方法


32

我正在尝试登录DSL路由器,因为我在处理命令行邮件时遇到了麻烦。我希望能够重新配置路由器。

当我发出ssh命令时,将发生以下情况:

$ ssh enduser@10.255.252.1

Unable to negotiate with 10.255.252.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

因此,我查看了这个stackexchange帖子,并对此进行了修改,但是这次我遇到了另一个问题,即密码。

$ ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 enduser@10.255.252.1

Unable to negotiate with 10.255.252.1 port 22: no matching cipher found. Their offer: 3des-cbc

所以有提供 3des-cbc加密的命令吗?我不确定3des,例如是否要将其永久添加到系统中。

是否有允许3des-cbc密码的命令?

这里有什么问题?它不要求输入密码。


1
也许已经在这里
Eduardo Baitello

1
Ssh可以使用多种不同的加密算法,并且客户端和服务器之间没有通用的加密算法。尝试使用ssh -o KexAlgorithms=diffe-hellman-group-sha1 enduser@10.255.252.1强制客户端使用较旧的,安全性较低的算法,并查看路由器是否有更新的固件。
icarus

1
ssh -vvv ...将揭示服务器提供的所有密钥交换和密码协议。
大卫·佛斯特

Answers:


47

在建立加密通道时会发生此特定错误。如果您的系统和远程系统没有共享至少一个密码,那么就没有密码可以达成共识,也就不可能有加密通道。通常,SSH服务器会提供少量不同的密码,以迎合不同的客户端。我不确定为什么将您的服务器配置为仅允许3DES-CBC。

现在,3DES-CBC并不可怕。它很慢,并且比其他一些算法提供的安全性更低,但是只要正确选择了密钥,它就不会立即被破坏。当可以在传输过程中修改密文时,CBC本身存在一些问题,但是我强烈怀疑由此产生的损坏会被SSH的HMAC拒绝,从而降低了影响。最重要的是,有比3DES-CBC糟糕的选择,还有更好的选择。但是,在覆盖与安全相关的默认值(包括密码和密钥交换算法选择)时,请务必谨慎行事。这些默认值是有原因的默认值。一些非常聪明的人花了一些脑力考虑这些选项,并确定选择默认值可以提供最佳的总体安全性与性能之间的权衡。

如您所知,您可以使用-c ...(或-oCiphers=...)指定要从客户端提供的密码。在这种情况下,添加-c 3des-cbc仅允许来自客户端的3DES-CBC。由于这与服务器提供的密码相匹配,因此可以建立加密通道,并且连接会进入身份验证阶段。

您也可以将此添加到您的个人帐户中~/.ssh/config。为避免进行全局更改以解决局部问题,可以将其放在Host节中。例如,如果您的SSH配置当前显示(虚拟示例):

Port 9922

指定全局默认端口9922而不是默认22,可以为需要特殊配置的主机添加一个主机节,并为默认情况添加一个全局主机节。那会变成...

Host 10.255.252.1
    Ciphers 3des-cbc
    KexAlgorithms +diffie-hellman-group1-sha1
Host *
    Port 9922

缩进是可选的,但是我发现它大大提高了可读性。空行和以开头的行将#被忽略。

如果您始终(或主要)以该系统上的同一用户身份登录,则还可以指定该用户名:

Host 10.255.252.1
    Ciphers 3des-cbc
    KexAlgorithms +diffie-hellman-group1-sha1
    User enduser
Host *
    Port 9922

Host *如果〜/ .ssh / config中没有任何内容,则无需添加节,因为在这种情况下,仅编译内置或系统范围的默认设置(通常来自/ etc / ssh / ssh_config)用过的。

至此,连接到该主机的ssh命令行简化为

$ ssh 10.255.252.1

并且系统上的所有其他用户以及从系统到所有其他主机的连接不受更改的影响。


在我的情况下,我必须删除该Cipher行,但随后它起作用了!谢谢!
carlspring '18年

根据ssh_config手册页(链接),密码的配置文件语法为“ Cipher s ”(请注意结尾的s)。
MikeV

28

好的,我阅读了手册并弄清楚了。

我不想修改配置文件,因此我在手册页中搜索了“密码”一词,该-c选项向我显示了该选项。这使我可以指定加密类型。结束命令是:

ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -c 3des-cbc enduser@10.255.252.1

4
手动选择密码时要小心,除非您知道自己在做什么,否则您很容易选择一个较弱的密码(可用性等)。
heemayl

同上@heemayl。3DES-CBC还不错,但是至少最新版本的OpenSSH支持某些密码,这些密码在所有意图和目的上都被彻底破坏了。小心踩一下。
CVn

3

我最近在使用PuTTY连接到较新版本的Ubuntu时遇到了这个问题。看来PuTTY的早期版本没有更新密码。因此,下载最新版本的PuTTY可以解决此问题。那可能是另一种解决方案。


1
尽管路由器通常不及时更新,或者制造商对它们的支持不佳。
盖伊

0

MacOSX和CLI命令的另一个答案(例如SFTP):请参阅本文@ http://www.openssh.com/legacy.html(OpenSSL传统选项)。我遇到了一个一致的错误“无法协商”,该错误已由本文中的信息解决,特别是在“〜/ .ssh / config”文件中配置参数的设置。

顺便说一句,当我的目标SFTP服务器(不在我的管理下)最终关闭TLS 1.0(SSL加密选项)并需要TLS 1.1或1.2时,出现此错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.