可能导致 .ssh/config 更改被忽略的原因

可能导致 .ssh/config 更改被忽略的原因

我有一个~/.ssh/config运行良好的文件。它的格式如下:

Host *
  IdentityFile ~/.ssh/id_null
  TCPKeepAlive no
  ServerAliveCountMax 5000
Host *.domain.com
  User mydomainuser
  IdentityFile ~/.ssh/id_domain
Host github.com
  User gcb
  IdentityFile ~/.ssh/id_domain

(它有更多域,但现在我们先忽略它们)

它运行完美,即使手册上说更具体的主机模式应该放在最上面,它总是这样运行良好。我总是 ssh 到这两个域,并且正确的身份密钥被很好地拾取。我从来没有遇到过将空密钥尝试到这两个域的问题。而且我用了好几年。总是得到正确的用户和密钥。我在 debian、fedora 和 osx 上都使用了相同的配置文件。

今天,在 osx 10.10 (OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011) 上,之前可以正常工作,我尝试在顶部添加User unkown规则*。突然间,现在每次我尝试 ssh 时,ssh 都会发送 user=unkown 和identityfile=id_null,导致无法登录任何地方。这让我去阅读 ssh_config 的手册页,并严格按照书上说的做... 但仍然无法正常工作。我还尝试删除条目,User*问题没有解决。

我当前的.ssh/config文件是

Host exact.hostname.domain.com
  User mydomainuser
  IdentityFile ~/.ssh/id_domain
Host *.domain.com
  User mydomainuser
  IdentityFile ~/.ssh/id_domain
Host github.com
  User gcb
  IdentityFile ~/.ssh/id_domain
Host *
  IdentityFile ~/.ssh/id_null
  TCPKeepAlive no
  ServerAliveCountMax 50

当 i 时,它仍会尝试使用 id_null 作为身份文件ssh exact.hostname.domain.com。我还尝试使用多个模式,而不是Host *.domain.com exact.hostname.domain.com重复。没有任何效果。有什么想法吗?

我如何才能在每个域的基础上设置默认值并覆盖它们UserIdentityFile


编辑 1:我Host exact.hostname.domain.com在之前和之后都添加了*。并ssh -vvv显示:

debug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com
debug1: /Users/.../.ssh/config line 19: Applying options for *
debug1: /Users/.../.ssh/config line 37: Applying options for exact.hostname.domain.com

但我最终还是得到了no such identity: .ssh/id_null: No such file or directory


编辑2:我看到的一些其他奇怪的东西ssh -vvv

它总是尝试使用我拥有的所有密钥。因此,我认为它可能有一些硬编码的默认值.ssh/id_rsa*,因此我将我的所有私钥移至以.ssh/keys/隐藏该默认值,并更新了特定Host条目...结果,它正在尝试所有主机条目中的密钥!即使是没有匹配的!

回顾一下,我在文件的顶部和底部有一个特定的主机匹配(只是为了安全),然后是不匹配的主机和一个*

但 ssh -vvv 显示:

debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /Users/x/.ssh/keys/id_rsa_git (0x7f954b700530),
debug2: key: /Users/x/.ssh/keys/id_rsa (0x7f954b415700), explicit
debug2: key: /Users/x/.ssh/id_null (0x0), explicit

.ssh/keys/id_rsa_git如果这是IdentityFile下面唯一提到的,那么它究竟为什么要添加Host github.com?为什么它最终会尝试发送,id_null即使它Host exact.hostname.domain.com与调试输出中所说的显式匹配debug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com


编辑3:

在我将所有密钥移至.ssh/keys/*并仅为其中的每个主机指定密钥后ssh_config,现在我在每个ssh实例上都能看到:

/Users/me/.ssh/id_*[^p][^u][^b]: No such file or directory

但即便如此,仍然从以下位置加载 IdentityFiles其他连接时在 ssh_config 中检查主机。为什么?!

答案1

man ssh-config说:

由于使用了每个参数的第一个获得的值,因此应在文件开头附近给出更多特定于主机的声明,并在末尾给出一般默认值。

因此,请确保您想要的配置位于第一个匹配的Host条目中,如匹配的行所示ssh -vvApplying options for

在一般情况下,这意味着Host *应该最后的

相关内容