如何使用多个ssh密钥
如何处理多个SSH密钥
在使用SSH传输时,GitHub会根据您用于身份验证的SSH密钥来识别您。因此,您需要确保git在一个仓库中使用一个SSH密钥,而在另一个仓库中使用另一个SSH密钥。
假设您有一个名为"user1"的GitHub账户,并且您已向该账户添加了与本地私钥"/home/whoever/.ssh/id_rsa"对应的公钥。假设您希望访问的仓库是GitHub上的"user1/whatever"。
您还有一个名为"user2"的第二个GitHub账户,并且您已向该账户添加了与本地私钥"/home/whoever/.ssh/new/id_rsa"对应的公钥。假设您希望访问的仓库是GitHub上的"user2/whatever"。
处理这种情况最简单的方法是为每个仓库创建一个新的"remote"(即远程仓库的别名),其中每个远程仓库的URL中的主机名实际上是您在"~/.ssh/config"中设置的别名。(如果该配置文件不存在,则必须创建它。)
例如,"~/.ssh/config"文件中的一个条目可能如下所示:
Host github-as-user1 HostName github.com User git IdentityFile /home/whoever/.ssh/id_rsa
然后,您可以使用以下命令添加一个名为"gh-user1"的远程仓库:
git remote add gh-user1 git-as-user1:user1/whatever.git
如果您想使用"~/.ssh/id_rsa"密钥将"master"分支推送到GitHub上的仓库"user1/whatever",只需执行以下命令:
git push gh-user1 master
要以另一个用户("user2")的身份推送到第二个仓库,您需要在"~/.ssh/config"文件中添加第二个别名。例如:
Host gh-as-user2
HostName github.com
User git
IdentityFile /home/whoever/.ssh/new/id_rsa
然后,要以不同用户的身份推送到第二个仓库,只需执行以下命令:
git push gh-user2 master
如果git不能正常工作,没有.ssh/config文件怎么办?为什么git不能像标准SSH一样接受一个参数,比如-i .ssh/my_github_key?
我想补充一点,可以通过"ssh -T git-as-user1"和"ssh -T git-as-user2"进行测试。如果不起作用,请尝试运行"ssh-add ~/.ssh/new/id_rsa"或"ssh-add ~/.ssh/id_rsa"。
如果您使用的密钥存在于~/.ssh目录之外,除非执行"ssh-add /path/to/key",否则它们将无法正常工作。