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