摘要:默认情况下,单台机器只能使用一个与账户对应的SSH密钥连接github,这给多用户连接多账户带来不便。可利用config文件解决这一问题。
需求
机器 A 一直使用账户 user1 的 SSH 公钥连接 github。现在新建账户 user2,希望在机器 A 也能够以 SSH 方式连接到 github
问题描述
默认情况下,即机器 A 一直使用账户 user1。此时使用命令 $ git remote -v
可以查看当前的远程仓库关联如下:
origin git@github.com:user1Name/repositorie1Name.git (fetch)
origin git@github.com:user1Name/repositorie1Name.git (push)
如果 user2 新建一个名为 repositorie2Name 的仓库,此时想在机器 A 上使用命令 $ git push -u origin master
提交到远程仓库,会出现如下的错误。
ERROR: Permission to user2Name/repositorie2Name.git denied to user2.
fatal: Could not read from remote repository.Please make sure you have the correct access rights and the repository exists.
问题原因
机器 A 当前的公钥是 user1 的,user2 没有权限使用;想在 user2 的账户中添加 user1 的公钥?也是不可能的,会提示公钥已经被使用。
解决方案
- 在 user2 的项目目录中打开命令行,执行命令:
ssh-keygen -t rsa -C "second@email.com" -f ~/.ssh/id_rsa_for_user2
,生成专属 user2 的密钥对,再进入 user2 的 github 账户配置公钥。 - 在
~/.ssh/
目录下新建config
文件,写入以下内容:
win10 路径:
C:\Users\Admin\.ssh
macOS 路径:
~/user/.ssh
#Default GitHub
Host user1
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
Host user2
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_for_user2
- 回到命令行,执行命令:
$ git remote set-url origin git@user1:user1Name/repositorie1Name.git
,修改默认的关联。也可以把原有的默认关联删除,重新添加。 - 再继续执行命令:
$ git remote add origin2 git@user2:user2Name/repositorie2Name.git
,新添加一个 user2 的关联。 - 此时执行命令:
$ git remote -v
,应是以下结果:
origin2 git@user2:user2Name/repositorie2Name.git (fetch)
origin2 git@user2:user2Name/repositorie2Name.git (push)
origin git@user1:user1Name/repositorie1Name.git (fetch)
origin git@user1:user1Name/repositorie1Name.git (push)
- 验证。可分别执行命令:
$ ssh -T git@user1
、$ ssh -T git@user2
,均出现连接成功提示。至此,实现了多个 SSH 公钥连接多个 github 远程仓库的需求。
要加
git@
前缀,否则提示Permission denied (publickey)
(win10 环境,macOS 未实测)
Hi user1! You've successfully authenticated, but GitHub does not provide shell access.
Hi user2! You've successfully authenticated, but GitHub does not provide shell access.
注:github 添加的是如果是 deploy key,会显示库名称,如:username/xxx