openssh 客户端配置的选项覆盖

openssh 客户端配置的选项覆盖

由于我想保护我的 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

可以覆盖该值

相关内容