Sco*_*ley 6 ssh openssh ssh-keys
我的 SSH 配置文件设置为使用该Host *
部分中的特定 IdentityFile作为默认密钥。对于一个特定的主机,我想提供一个不同的密钥(并且只有那个密钥,而不是默认密钥)。
我的 ~/.ssh/config 文件如下所示:
Host specialhost
HostName specialhostname.mydomain.com
IdentityFile %d/.ssh/special-key
LogLevel debug
IdentitiesOnly yes
Host *
IdentityFile %d/.ssh/regular-key
IdentitiesOnly yes
Run Code Online (Sandbox Code Playgroud)
不管我做什么,或者不管配置文件中部分的顺序如何,我的 SSH 客户端(OS X OpenSSH_6.2p2)首先提供“常规密钥”(服务器接受它,这不是我想要的)。
ssh_config 手册页说明了以下内容IdentityFile
:
配置文件中可以指定多个身份文件;所有这些身份都将依次尝试。
我不清楚它所指的“序列”,因为该Host *
部分中列出的 IdentityFile总是首先提供,即使“specialhost”列在它之前(如上例所示)。这里IdentitiesOnly
建议的技巧似乎只与 ssh-agent 提供的密钥相关。一些其他类似的问题还没有得到任何答案。
我想在该Host *
部分中保留常规键,因为我将该键与许多其他主机一起使用,并且我不想IdentityFile
在每个主机条目中复制该键。
有什么方法可以强制 SSH 仅使用 SSH 配置提供“特殊密钥” (并且无需将我的 IdentityFile 指令复制到所有其他主机)?我可以通过从该Host *
部分中取出密钥,将它们添加到代理,然后使用IdentitiesOnly yes
for specialhost来了解如何实现这一点,但我真的更愿意避免使用 ssh-agent,除非没有其他方法。
Ken*_*ter 16
一条Host
线可以有多个模式。它并没有在文档中真正说明,而是一个“!” (感叹号)在模式开头表示“如果主机匹配此模式,则不应用该部分”。换句话说,你可以这样做:
Host * !special1 !special2
IdentityFile etc...
Run Code Online (Sandbox Code Playgroud)
它应该匹配除“special1”和“special2”之外的任何主机。
我认为模式的顺序并不重要。被检查的主机名必须匹配一个非感叹号模式,并且它必须不匹配任何感叹号模式。
归档时间: |
|
查看次数: |
2977 次 |
最近记录: |