如何处理多个 ssh 密钥

min*_*ang 1 git ssh ssh-keys

我在两个 github 帐户中为不同的项目创建了两个 ssh 密钥。一个是我的帐户,另一个是公司帐户 github。我使用不同的 ssh-key 从事项目。所以每次当我打开不同的项目时我都会输入这个命令。

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa_my_git
Run Code Online (Sandbox Code Playgroud)
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa_company_git
Run Code Online (Sandbox Code Playgroud)

我希望通过向项目或电脑添加配置文件或使用其他方式来避免每次都输入此内容。

che*_*ner 5

您只需运行这三个命令中的每一个一次;您可以将它们放入您拥有的任何登录 shell 配置文件中(例如,.bash_profile)。

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa_my_git
ssh-add ~/.ssh/id_rsa_company_git
Run Code Online (Sandbox Code Playgroud)

现在,当您使用 时gitssh将简单地尝试它在代理中找到的任何密钥,直到找到一个有效的密钥。

只要您没有太多的密钥可以尝试,远程端不会在 X 次失败的尝试后阻止您,然后您才能尝试正确的密钥,这样就可以了。在这种情况下,您可以修改ssh配置以创建使用单个特定密钥的 GitHub 别名,以便ssh始终可以在第一次使用正确的密钥。此方法还完全不需要使用ssh-agent,但如果您有密码并且只想在首次将密钥加载到代理中时输入一次,您可能仍然需要使用。

例如,您可以将以下内容放入您的~/.ssh/config文件中。

Host github-me
    Hostname github.com
    IdentityFile id_rsa_my_git

Host github-company
    Hostname github.com
    IdentityFile id_rsa_company_git
Run Code Online (Sandbox Code Playgroud)

然后你会使用类似的命令

git clone git@github-me:me/personal_project
git clone git@github-company:company/work_project
Run Code Online (Sandbox Code Playgroud)

ssh根据主机名知道要使用哪个密钥。