我正在 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
终止。Match
Host
请注意,这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