指定 SSH KexAlgorithms 在 CLI 中有效,但不能通过 ssh_config

指定 SSH KexAlgorithms 在 CLI 中有效,但不能通过 ssh_config

默认情况下,我的 SSH 客户端不允许使用diffie-hellman-group-exchange-sha256密钥交换算法。但是,我需要访问 10.0.0.1 上的服务器,该服务器需要使用该算法。

这在命令行下工作得很好:

$ ssh -o KexAlgorithms=diffie-hellman-group-exchange-sha256 [email protected]
Password:

但是,如果我尝试在末尾添加以下内容,则会失败/etc/ssh/ssh_config

Host 10.0.0.1
    KexAlgorithms diffie-hellman-group-exchange-sha256

这是相关的输出:

$ ssh -vvv [email protected]
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug3: kex names ok: [[email protected]]
...
debug1: /etc/ssh/ssh_config line 72: Applying options for 10.0.0.1
debug3: kex names ok: [diffie-hellman-group-exchange-sha256]
...
debug1: Connecting to 10.0.0.1 [10.0.0.1] port 22.
debug1: Connection established.
...
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: [email protected]
...
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256
...
debug2: kex_parse_kexinit: first_kex_follows 0 
debug2: kex_parse_kexinit: reserved 0 
debug2: mac_setup: setup hmac-ripemd160
debug1: kex: server->client aes256-ctr hmac-ripemd160 none
debug2: mac_setup: setup hmac-ripemd160
debug1: kex: client->server aes256-ctr hmac-ripemd160 none
Unable to negotiate a key exchange method

我对此感到困惑的是 SSH 清楚地读取了相关行/etc/ssh/ssh_config并且似乎对此感到满意。但随后它尝试使用[email protected]而不是与服务器协商密钥交换diffie-hellman-group-exchange-sha256,这当然会失败。

为什么会这样,我该如何纠正?

答案1

乍一看,OpenSSH 选项可能表现得有些奇怪。但手册页ssh_config很好地记录了它:

对于每个参数,将使用第一个获得的值。配置文件包含由“主机”规范分隔的部分,并且该部分仅适用于与规范中给出的模式之一匹配的主机。匹配的主机名通常是命令行上给出的主机名(有关例外情况,请参阅 CanonicalizeHostname 选项。)

您可以像这样重写您的配置来实现您所需要的(星星*匹配应该是最后一个):

Host 10.0.0.1
    KexAlgorithms diffie-hellman-group-exchange-sha256
#[...]
Host *
    KexAlgorithms [email protected]

从我的重复答案

并解释为什么命令行选项有效,也来自同一手册页ssh_config

  1. 命令行选项
  2. 用户的配置文件(~/.ssh/config)
  3. 系统范围的配置文件(/etc/ssh/ssh_config)

相关内容