Git使用笔记(二)— 通过新增公钥管理多个GitHub账号代码
碰到的具体问题:
ERROR: Permission to UserB/Navigation.git denied to UserA.
fatal: 无法读取远程仓库。
请确认您有正确的访问权限并且仓库存在。
GitHub机制:不能有多个账号添加了同一个公钥。比如在GitHub存在UserA和UserB,假设UserA和UserB都绑定了同一个公钥,一旦使用该公钥的设备发起登录或者操作,那GitHub就不能区分到底是UserA还是UserB在安全登录网站,那安全登录机制就起不到任何效果。
解决方案:生成多个公钥,来对应绑定多个GitHub账号。
引用说明
参考地址:Git 最著名报错 “ERROR Permission to XXX git denied to user”终极解决方案
本篇文章基于上面的参考地址修改而来,本篇文章仅仅提炼出最简要的信息供个人记录使用。如果如果想要了解详情,可以直接参考上面的地址。
文章目录
一、创建一个公钥
1.配置好用户信息
developer@aiot1808-devel:~$ git config --global user.email "yourGitHubMail@xxx.com"
developer@aiot1808-devel:~$ git config --global user.name "yourGitHubName"
2.找到.ssh目录
.ssh目录通常在家目录中找到:
developer@aiot1808-devel:~/work$ cd ~
developer@aiot1808-devel:~$ ls -a
. .android .bashrc .dbus Examples .ICEauthority modules .profile rknn_api.h .rpmdb upgrade_tool .viminfo 模板 文档 桌面
.. .bash_history .cache .designer .gitconfig .local .mozilla .python_history rockx.h .ssh utils work 视频 下载
AIOT1808-SDK.tar.bz2 .bash_logout .config EASY-EAI-Toolkit .gnupg log .mplayer Qt5.9.1 rockx_type.h .sudo_as_admin_successful .vim 公共的 图片 音乐
如果没有,就创建它:
developer@aiot1808-devel:~/work$ cd ~
developer@aiot1808-devel:~$ mkdir .ssh
developer@aiot1808-devel:~$ cd .ssh
创建第一个公钥:
(利用ssh-keygen命令创建后,可以一路回车)
developer@aiot1808-devel:~/.ssh$ ssh-keygen -t rsa -C "UserA@qq.com"
创建第二个公钥:
(第一步时,要注意改一下生成的新公钥名字,不然会把第一个公钥给覆盖掉。然后再一路回车)
developer@aiot1808-devel:~/.ssh$ ssh-keygen -t rsa -C "UserB@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/developer/.ssh/id_rsa): /home/developer/.ssh/id_rsa_UserB
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/developer/.ssh/id_rsa_UserB.
Your public key has been saved in /home/developer/.ssh/id_rsa_UserB.pub.
The key fingerprint is:
SHA256:jj7y7WpUGnV7efp0LCSs3/zeKciScdQpnuzqnRFYtIo UserB@qq.com
The key's randomart image is:
+---[RSA 2048]----+
| . |
| . o . |
| . . =... |
| . o =o=oo |
| ESo++o= . |
| oo ..=o o o|
| .. . *o.= o |
| ..o. o.++.+ o|
| ++++ooo .++|
+----[SHA256]-----+
确认生成结果
developer@aiot1808-devel:~/.ssh$ ls
id_rsa id_rsa.pub id_rsa_UserB id_rsa_UserB.pub
文件名 | 说明 |
---|---|
id_rsa | 私钥,与第一个公钥对应 |
id_rsa.pub | 第一个公钥 |
id_rsa_UserB | 私钥,与第二个公钥对应 |
id_rsa_UserB.pub | 第二个公钥 |
3.修改配置文件
创建config文件
developer@aiot1808-devel:~/.ssh$ vim config
并写入以下内容:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
Host github-UserB
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_UserB
确认内容:
developer@aiot1808-devel:~/.ssh$ ls
config id_rsa id_rsa.pub id_rsa_UserB id_rsa_UserB.pub
developer@aiot1808-devel:~/.ssh$ cat config
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
Host github-UserB
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_UserB
developer@aiot1808-devel:~/.ssh$
4.把两个公钥部署到不同的GitHub账号中
这一步网上有许多教程,在此不作详细说明。
二、远程GitHub仓库管理
1.克隆UserA的GitHub仓库
developer@aiot1808-devel:~/.ssh$ cd ~
developer@aiot1808-devel:~$ git clone git@github.com:UserA/EASY-EAI-Toolkit-C-Demo.git
正克隆到 'EASY-EAI-Toolkit-C-Demo'...
remote: Enumerating objects: 368, done.
remote: Counting objects: 100% (368/368), done.
remote: Compressing objects: 100% (243/243), done.
remote: Total 368 (delta 122), reused 338 (delta 96), pack-reused 0
接收对象中: 100% (368/368), 3.19 MiB | 121.00 KiB/s, 完成.
处理 delta 中: 100% (122/122), 完成.
developer@aiot1808-devel:~$ ls
2.克隆UserB的GitHub仓库
注意:把UserA的仓库Host:github.com,替换成UserB的仓库Host:github-UserB
这里指定了Host,就会根据刚刚在~/.ssh里创建的config去索引不同的公钥
developer@aiot1808-devel:~/.ssh$ cd ~
developer@aiot1808-devel:~$ git clone git@github-UserB:UserB/Navigation.git
正克隆到 'Navigation'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
接收对象中: 100% (6/6), 完成.
remote: Total 6 (delta 0), reused 6 (delta 0), pack-reused 0
developer@aiot1808-devel:~$
总结
然后就可以愉快地工作了