ssh可以-i选择在身份验证时告诉使用哪个私钥文件:
-i identity_file选择一个文件,从中读取用于 RSA 或 DSA 身份验证的身份(私钥)。?默认
~/.ssh/identity为协议版本 1~/.ssh/id_rsa和~/.ssh/id_dsa协议版本 2。?身份文件也可以在配置文件中按主机指定。可以有多个-i选项(以及在配置文件中指定的多个身份)。
是否有类似的方法来告诉git在~/.ssh目录中有多个私钥的系统上使用哪个私钥文件?
我的 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 yesfor specialhost来了解如何实现这一点,但我真的更愿意避免使用 ssh-agent,除非没有其他方法。
如何ssh-agent理解应该将哪个密钥用于哪个远程服务器?
我遇到过以某种方式触及这个主题的不同问题和帖子,但我仍然不清楚。
我发现,如果您想使用不同的 ssh 密钥,您需要使用-i选项并指定所需密钥的路径,或者您可以设置身份文件,指定要使用哪个主机的密钥对。
但这是否意味着默认情况下ssh-agent只能使用一对密钥,并且会尝试将其用于所有远程服务器?
我有三个 SSH 密钥对,可以通过以下方式找到ssh-add -L;远程服务器接受两个密钥,但只有一个密钥可用于 GitHub,我想通过代理转发克隆一个 GitHub 存储库(托管限制阻止部署密钥工作)。
id_rsa通过 列出的第一个密钥 [ ] ssh-add -L,忽略我的-i命令,因此代理转发仅在删除密钥后才有效id_rsa:
ssh -A -tt -i ~/.ssh/id_rsa_github user@ip 'ssh -T git@github.com'
Run Code Online (Sandbox Code Playgroud)
IdentityFileand IdentitiesOnlyto ~/.ssh/config,但也不成功这是正常行为吗?如何强制 SSH 使用特定密钥?