如何使用多个ssh密钥

Aru*_*ana 32 git github ssh-keys

GitHub用户,

我是github上的新手,并且在git setup上有一些问题.我在github上有2个不同用户的帐号,我在我的系统上安装了2次git

第一个/ .ssh文件夹(像往常一样)(包含在第一个帐户中复制的id_rsa)
第二个/.ssh/new文件夹(包含在第二个帐户中复制的id_rsa)

现在在推送时如何在ssh键之间切换?

因为如果我想推送第二个帐户,它将使用.ssh键而不是.ssh/new并给我错误.

如果我在这里理解错误,请让我纠正.

谢谢.

Mar*_*air 48

(我已经投票决定将其作为一个可能的副本关闭,但我还是可以添加一个类似的答案.)

使用SSH传输时,GitHub会根据您用于进行身份验证的SSH密钥将您识别为用户.因此,您需要确保git使用一个SSH密钥用于一个存储库而另一个用于另一个存储库.

我会假设:

  1. 您有一个名为GitHub的帐户user1,并且您已向该帐户添加了与您的本地私钥对应的公钥/home/whoever/.ssh/id_rsa.比方说,在库中,您有兴趣访问的user1user1/whateverGitHub上.
  2. 您有第二个GitHub帐户,user2并且您已向该帐户添加了与您的本地私钥对应的公钥/home/whoever/.ssh/new/id_rsa.比方说,在库中,您有兴趣访问的user2user2/whateverGitHub上.

处理此问题的最简单方法是为每个存储库创建一个新的"远程"(即远程存储库的昵称),其中每个远程URL中的主机名实际上是您已设置的别名~/.ssh/config.(如果该配置文件不存在,则必须创建它.)

例如,~/.ssh/config文件中的一个条目可能如下所示:

Host github-as-user1
  HostName github.com
  User git
  IdentityFile /home/whoever/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

然后你可以添加一个叫做的遥控器gh-user1:

git remote add gh-user1 git@github-as-user1:user1/whatever.git
Run Code Online (Sandbox Code Playgroud)

...然后如果你想使用密钥将你的master分支推送到user1/whateverGitHub上的存储库~/.ssh/id_rsa,你可以这样做:

git push gh-user1 master
Run Code Online (Sandbox Code Playgroud)

为了将其他user(user2)推送到第二个存储库,您需要为您的~/.ssh/config文件添加第二个别名.例如:

Host gh-as-user2
  HostName github.com
  User git
  IdentityFile /home/whoever/.ssh/new/id_rsa
Run Code Online (Sandbox Code Playgroud)

然后,作为不同的用户推送到第二个存储库,您可以这样做:

git push gh-user2 master
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用的密钥存在于〜/ .ssh目录之外,除非您执行以下操作,否则它们将无法工作:`ssh-add/path/to/key` (4认同)
  • 所以git无法使用.ssh/config?为什么git不能像标准的ssh那样参数?-i .ssh/my_github_key (2认同)
  • 我要补充一点,可以通过ssh -T git @ gh-as-user1和ssh -T git @ gh-as-user1进行测试。如果不起作用,请尝试运行ssh-add〜/ .ssh / new / id_rsa或ssh-add〜/ .ssh / id_rsa (2认同)