我试图了解 OpenSSH 如何决定使用哪种密钥交换方法。我不知道如何指定方法。此外,我知道每个 ssh 服务器/客户端都是必需的支持至少两种方法:diffie-helleman-group1-sha1
和diffie-helleman-group14-sha1
,但我不清楚服务器和客户端如何在两者之间进行选择,因为每个程序都必须支持这两种方法。我认为在每种情况下都会diffie-helleman-group14-sha1
使用,因为它具有更大的 MODP 组。
我可以指定密码和 MAC:
ssh <user@ip> -c aes256-cbc -m hmac-sha1
但在手册页中我没有看到密钥交换的等效选项。有人能 1) 告诉我指定这个的方法 2) 解释 ssh 如何选择方法吗?(我怀疑它总是选择列表中的第一个,这意味着第二个永远不会被选中)
答案1
OpenSSH 5.7引入了KexAlgorithms
选项:
ssh(1)/sshd(8): add a KexAlgorithms knob to the client and server
configuration to allow selection of which key exchange methods are
used by ssh(1) and sshd(8) and their order of preference.
因此,如果您至少拥有该版本,您应该能够通过-oKexAlgorithms=<kex_list>
指定您的偏好。
据我所知,OpenSSH 客户端实际上不会打印出协商的 kex 算法,但如果您通过-vv
并查看这些kex_parse_kexinit
行,您可以看到客户端支持的 kex 算法列表(以及加密、MAC 等算法列表),然后是服务器支持的列表。理论上,客户端将选择其列表中的第一个算法,该算法也出现在服务器的列表中(即,选择有利于客户端的偏好)。因此,对于客户端列表a,b,c
和服务器列表c,b
,客户端选择算法b
。