![使用 ssh-agent 中指定的密钥](https://linux22.com/image/1295601/%E4%BD%BF%E7%94%A8%20ssh-agent%20%E4%B8%AD%E6%8C%87%E5%AE%9A%E7%9A%84%E5%AF%86%E9%92%A5.png)
沿着如何告诉 git 使用哪个私钥? 我想在特定情况下使用特定的 ssh 密钥。
我的问题是,即使我指定“-i something”,ssh 也会按照添加的顺序使用来自我的 ssh-agent 的密钥。
我的具体情况:
- 我有两个 github 用户,每个用户都有自己的密钥,我想 - 例如通过 ssh-config - 为每个克隆指定要使用的密钥:
Host USER1.git
Hostname github.com
User git
IdentityFile ~/.ssh/USER1.id_rsa
ssh -vt USER1.git
USER2.id_rsa
如果这是首先添加到 ssh-agent 的密钥,则仍将使用。
答案1
关键是要使用公钥文件内部IdentityFile
指令。
Host USER1.git
User git
HostName github.com
IdentityFile ~/.ssh/USER1.id_rsa.pub
Host USER2.git
User git
HostName github.com
IdentityFile ~/.ssh/USER2.id_rsa.pub
如果我们在 SSH 配置中指定私钥,则如果私钥被加密,SSH 代理将无法选择正确的密钥。
stackexchange 上也有类似的问题:https://unix.stackexchange.com/a/495785/264704
答案2
我终于让它工作了:
Host USER1.git
User git
HostName github.com
IdentityFile ~/.ssh/USER1.id_rsa
Host USER2.git
User git
HostName github.com
IdentityFile ~/.ssh/USER2.id_rsa
- 缩进很重要。
- 执行
ssh-add -l
并确保已添加两个密钥。- 将每个路径复制/粘贴
ssh-add -l
到相应的行中~/.ssh/config
以避免拼写错误。如果~/.ssh/config
USER1 的身份文件路径拼写错误,则会使用错误的密钥(USER2 的密钥)。
- 将每个路径复制/粘贴
我在 BitBucket 上找到了说明。它们应该适用于 GitHub,因为唯一的区别是HostName
:http://confluence.atlassian.com/pages/viewpage.action?pageId=271943168#ConfiguringMultipleSSHIdentitiesforGitBashMacOSXLinux-CreateaSSHconfigfile
为了使其在使用代理转发的远程服务器上工作,请尝试下面@stijn-hoop 的建议(在此答案的评论部分)。
答案3
在 .ssh/config 中使用IdentitiesOnly yes
这些主机。