github多账号管理
问题
当我们有多个github账户时,我们提交代码会遇到权限错误
1
2
ERROR: Permission to xxx/xxx.github.io.git denied to xxx.
fatal: Could not read from remote repository.
要解决这个问题,我们需要让当前仓库知道该用哪个ssh-key来提交代码
做法
1. 本地给每个账号生成一个对应的公钥
1
2
ssh-keygen -t rsa -C "账户1的github邮箱"
ssh-keygen -t rsa -C "账户2的github邮箱"
❗️在生成时不要无脑下一步,不然后面生成的公钥会覆盖前面生成的,遇到此条提示一定要给不同的公钥分配不同的名字
Enter file in which to save the key (/Users/xxx/.ssh/id_rsa): path/to/your/id_rsa_acount1_github
Enter file in which to save the key (/Users/xxx/.ssh/id_rsa): path/to/your/id_rsa_acount2_github
Tips: 文件名自己定义一个好记的名字即可,最好和github账号有所关联,便于管理
2. 将两个公钥加入ssh-agent中
1
2
ssh-add path/to/your/id_rsa_acount1_github
ssh-add path/to/your/id_rsa_acount2_github
3. 给不同的公钥配置不同的Host
用你最顺手的编辑器打开~/.ssh/config
如果文件不存在,就自己创建一个
然后将下面内容放进去
1
2
3
4
5
6
7
8
9
User git
Host acount1.github.com
HostName github.com
IdentityFile path/to/your/id_rsa_acount1_github
User git
Host acount2.github.com
HostName github.com
IdentityFile path/to/your/id_rsa_acount2_github
4. 在github.com添加自己的ssh-key
将每个ssh-key的公钥(也就是后缀为.pub文件中的内容)添加到对应的github的账户ssh配置中 上传ssh公钥
5. 配置当前项目的remote链接
1
2
3
4
# 如果是新仓库
git remote add origin git@acount1.github.com:xxx/xxx.git
# 如果是老仓库
git remote set-url origin git@acount2.github.com:xxx/xxx.git
🌰 举个栗子:
原本的仓库remote地址为:git@github.com:xxx/xxx.git
如果需要账户1提交,则将其改为:git@acount1.github.com:xxx/xxx.git
如果需要账户2提交,则将其改为:git@acount2.github.com:xxx/xxx.git
🎉 然后就可以以对应账户的ssh与github进行验证,顺利提交代码啦
原理
仔细观察~/.ssh/config,并结合使用方式,我们不难发现
User
指的是对接远程仓库的用户名是什么,对于github来讲,一般都是gitHost
相当于我们自己给远程仓库的域名起了个小名HostName
我们的小名原本应该叫什么IdentityFile
当我们叫小名时,ssh应该去找哪一个公钥
第5步,其实就是把仓库链接里的大名(github.com)改成了小名(acount1.github.com)
当我们提交时,ssh可以通过小名(acount1.github.com)找到他的大名(github.com),所以我们改了链接之后其实依然提交到了大名(github.com)里,并不会造成异常
而不同的小名映射到了不同的ssh-key上
这样,就实现用指定账户的ssh-key提交代码了