如何处理多个 ssh 密钥

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

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa_my_git
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa_company_git

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

stack overflow How to handle multiple ssh-keys
原文答案

答案:

作者头像

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

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa_my_git
ssh-add ~/.ssh/id_rsa_company_git

现在,当您使用 git 时, ssh 将简单地尝试它在代理中找到的 any 键,直到找到一个有效的键。

这很好,只要你没有太多的键可以尝试,在 X 次尝试失败后远程端不会阻止你,然后你可以尝试正确的键。在这种情况下,您可以修改您的 ssh 配置,为使用单个 specific 密钥的 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

然后你会使用类似的命令

git clone git@github-me:me/personal_project
git clone git@github-company:company/work_project

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

作者头像

在你的配置文件中添加这个:

Host work  
  HostName github.com  
  User git  
  IdentityFile ~/.ssh/id_work

Host personal  
  HostName github.com  
  User git  
  IdentityFile ~/.ssh/id_personal