我知道 ssh 配置文件是从上到下解析的,并且它使用为第一个有效匹配列出的选项,如果已经看到该选项,则忽略后面有效匹配中的选项。我尝试了几种不同的格式变体,但通过我的努力,它似乎要么不喜欢语法/格式,要么忽略该选项(如果它在同一主机下出现两次)。
我正在使用这个版本:
ssh -V
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
对于任意示例,KexAlgorithms 选项支持显式列表,或从默认集中添加和删除:
指定可用的 KEX(密钥交换)算法。多个算法必须以逗号分隔。如果指定的列表以“+”字符开头,则指定的方法将附加到默认集而不是替换它们。如果指定的列表以“-”字符开头,则指定的方法(包括通配符)将从默认集中删除而不是替换它们。如果指定的列表以“^”字符开头,则指定的方法将放置在默认集的开头。
https://man7.org/linux/man-pages/man5/ssh_config.5.html
如果我想将默认设置更改为:
- 删除:diffie-hellman-group-exchange-sha256 以及 curve25519-sha256
- 添加:diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1
有谁知道语法,或者是否可以添加和删除,而不必自己制作所有选项的完全明确的列表?
我尝试在 KexAlgorithms 之后的同一行中使用 + 和 - 列表修饰符,但它报告为垃圾。如果我将它们拆分为单独的列表(见下文),它执行得很好,但似乎只执行顶部的 KexAlgorithms 选项,而不是两者。
Host myHost
HostName myHost.myDomain.com
KexAlgorithms -"diffie-hellman-group-exchange-sha256,curve25519-sha256"
KexAlgorithms +"diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1"
我知道我正在删除一些安全选项并添加不安全的选项,无需告诉我:-)
谢谢!
更新:根据要求ssh -Q kex
输出:
diffie-hellman-group1-sha1
diffie-hellman-group14-sha1
diffie-hellman-group14-sha256
diffie-hellman-group16-sha512
diffie-hellman-group18-sha512
diffie-hellman-group-exchange-sha1
diffie-hellman-group-exchange-sha256
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
curve25519-sha256
[email protected]
[email protected]
答案1
从您链接的联机帮助页中:
由于使用每个参数的第一个获得的值,因此应在文件开头附近给出更多特定于主机的声明,并在末尾给出一般默认值。
这意味着如果您有KexAlgorithms
两次,则仅考虑第一个。
在所使用的算法中KexAlgorithms
,您可以设置、删除或添加算法,但不能组合使用这些算法。
因此,您可以拥有自己的个性化列表,但必须明确设置它。
为了检查它是否有效,ssh -vv Myhost
您可以执行以下操作而不是冗长的操作:
ssh -G myHost | grep -i kex