由于我想保护我的 ssh 连接,因此我设置了一些全局密码套件选项来限制使用的算法集。但最近我遇到了一个不支持其中一些算法的服务器。因此,我需要有选择地为客户端(我的系统)配置中的特定主机记录启用已弃用的算法。
我发现选项覆盖没有按我的预期工作。让我们在 github 上举一个最小的(不)工作的例子:
HostKeyAlgorithms [email protected],ssh-ed25519,[email protected],ecdsa-sha2-nistp521,ecdsa-sha2-nistp256
Host github
HostKeyAlgorithms ssh-rsa
Hostname github.com
Port 22
User git
PubkeyAuthentication yes
IdentityFile ~/.ssh/some-filename-here
有了这个,我收到以下错误(HostKeyAlgorithms
根本没有被覆盖):
debug1: /home/username/.ssh/config line 14: Applying options for github
<...>
debug2: kex_parse_kexinit: [email protected],ssh-ed25519,[email protected],ecdsa-sha2-nistp521,ecdsa-sha2-nistp256
<...>
Unable to negotiate with 192.30.252.130: no matching host key type found. Their offer: ssh-dss,ssh-rsa
同样,它不适用于PubkeyAuthentication no
主机配置中具有覆盖的全局选项。
此外,match
也没有帮助:
match host github
HostKeyAlgorithms ssh-rsa
那么,有没有办法有选择地重新定义这些选项呢?
注意:我在 gentoo 上使用 openssh-7.1_p2-r1。
答案1
乍一看,OpenSSH 选项可能表现得有些奇怪。但手册页ssh_config
很好地记录了它:
对于每个参数,将使用第一个获得的值。配置文件包含由“主机”规范分隔的部分,并且该部分仅适用于与规范中给出的模式之一匹配的主机。匹配的主机名通常是命令行上给出的主机名(有关例外情况,请参阅 CanonicalizeHostname 选项。)
您可以像这样重写您的配置来实现您所需要的:
Host github
HostKeyAlgorithms ssh-rsa
Hostname github.com
Port 22
User git
PubkeyAuthentication yes
IdentityFile ~/.ssh/some-filename-here
Host *
HostKeyAlgorithms [email protected],ssh-ed25519,[email protected],ecdsa-sha2-nistp521,ecdsa-sha2-nistp256
答案2
除了一些特定的(经常使用的)选项(例如-p
设置端口)之外,还有通用-o
选项。
ssh -o HostKeyAlgorithms=ssh-algamel
可以覆盖该值