我可以忽略 ssh 配置中的错误吗?

我可以忽略 ssh 配置中的错误吗?

我正在 docker 容器中运行 ubuntu 映像,并从本机 MacOs 环境挂载我的 .ssh 目录。

我的 .ssh/config 文件包含

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519_common

这在 Mac 上工作正常,但 AddKeysToAgent 和 UseKeychain 对 Linux 无效,并且使用 openssh-client 包的任何内容(例如 git)不仅会忽略无法识别的指令,还会失败并退出。

有什么方法可以让我在 Mac 和 Linux 上共享 .ssh/config 文件吗?

答案1

您可以使用Match关键字ssh 配置文件来限制配置的一部分仅在某些条件下应用。对于问题中的摘录,类似以下内容应该有效:

Host *
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_ed25519_common

Match exec "uname -s | grep Darwin"
    UseKeychain yes

在 Linux 系统上,grep将返回失败 (1),因此以下行将被忽略;在 Mac 主机上,grep 将返回成功 (0) 并且UseKeychain yes将应用该行。

该块由下一个、、或文件结尾Match终止。MatchHost

请注意,这AddKeysToAgent不是特定于平台的,但自版本 7.2 起可在 OpenSSH 中使用,因此您可能在 Ubuntu 容器中使用旧版本的 OpenSSH,但不在 Mac 主机上使用。

答案2

您应该IgnoreUnknown尽早在您的~/.ssh/config

IgnoreUnknown   UseKeychain,AddKeysToAgent

ssh_config(5)联机帮助页:

IgnoreUnknown

指定在配置解析中遇到时要忽略的未知选项的模式列表。如果ssh_config包含无法识别的选项,这可用于抑制错误ssh(1)。建议IgnoreUnknown在配置文件中尽早列出,因为它不会应用于出现在其之前的未知选项。


在我可以测试的所有版本上openssh,失败Match条件将不是防止ssh在任何未知的以下指令上出错:

$ cat ~/.ssh/config
Match !all
        Foobar yes
$ ssh localhost
/home2/ahq/.ssh/config: line 2: Bad configuration option: foobar
/home2/ahq/.ssh/config: terminating, 1 bad configuration options

相关内容