本文详细记录了怎么在一台电脑上通过SSH的config配置管理多个Github账号,让不同账号的仓库并处。
Github的仓库管理是通过ssh协议进行的,公钥在全网不能重复,也就是说两个Github账号不能共用同一套ssh密钥,因此想要在同一台电脑上管理多个Github账号仓库,就要给每一个账号都生成一套ssh密钥,通过config配置文件指定对应仓库使用的密钥,详细操作步骤记录如下。
生成SSH密钥
这里以两个账号为例,首先生成两套SSH key,ssh-keygen命令应该是系统标配了,如果没有这个命令,安装Git后也应该一并安装了,执行下面的命令生成第一套密钥。
ssh-keygen -t rsa -f ~/.ssh/id_rsa_1 -C "your_email@example.com"
参数含义如下:
-t:指定要创建的密钥类型,可以使用:“rsa1″(SSH-1) “rsa”(SSH-2) “dsa”(SSH-2)。
-f: 指定密钥输出的文件名。
-C: 是一个注释,一般填邮箱地址。
一路按回车执行默认操作,在c盘的Users/Leon/.ssh目录中生成私钥id_rsa_1和公钥id_rsa_1.pub
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Leon/.ssh/id_rsa_1
Your public key has been saved in /c/Users/Leon/.ssh/id_rsa_1.pub
The key fingerprint is:
SHA256:1T8JChoEbNurK0TBSvF0o4Yc2oDRIOrFU/lh0io6b/k your_email@example.com
The key's randomart image is:
+---[RSA 3072]----+
|*B.o.=+ |
|*+X *+.+ . |
|++.X o* o . o |
|o +.o..+ o . o . |
| o. . ..S . + |
| o. . . |
| .o .. |
| .+. |
| ..oE |
+----[SHA256]-----+
第二套密钥如法炮制,同样的目录中生成id_rsa_2和id_rsa_2.pub,此时这个目录中应该有两套密钥,4个文件。
配置SSH config
配置SSH的config文件,指定Git命令使用的是哪一套密钥。这个文件一般位于用户home目录的.ssh文件夹中,可以执行下面的命令查看。
cat ~/.ssh/config
如果没有这个文件,就手动创建一个。
touch ~/.ssh/config
编辑config文件,输入下面的配置项。
Host labno3
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_1
IdentitiesOnly yes
Host ming102
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_2
IdentitiesOnly yes
配置项的含义解释如下:
Host: 执行SSH命令的时候如何匹配到这个配置。
- *,匹配所有主机名。
- *.example.com,匹配以 .example.com 结尾。
- !*.dialup.example.com,*.example.com,以 ! 开头是排除的意思。
- 192.168.0.?,匹配 192.168.0.[0-9] 的 IP。
HostName:是真实的主机名,默认值为命令行中输入的值,可以是IP。
User: 是登录的用户名。
IdentityFile: 私钥文件路径。
identitiesOnly: 指定 ssh 只能使用配置文件指定的 identity 和 certificate 文件通过 ssh 命令行验证身份。
这里的重点在Host,指定对应的私钥就是通过匹配host来完成。
配置Gihub SSH keys
把公钥分别配置给Github账号的SSH keys,路径在Settings>SSh and GPG keys,点击New SSH key添加公钥。
Title里随便输入名称,只是用来标识用,比如Win10,Key里面输入SSH密钥里的公钥,就是以.pub结尾的文件的内容,就像这样,注意不要用Windows自带的编辑器打开文件,可能会混入特殊字符。
创建Github仓库
在Github上创建一个仓库,这里我命名为test,测试下效果。
在本地创建一个test文件夹,在里面初始化一个本地Git仓库
git init
配置用户名和邮箱,这个是推送代码的用户名和邮箱,跟对应的账号需要是一致的。
git config user.name labno3
git config user.email labno3@126.com
添加远程仓库是重点,远程URL的地址的更改是关键,Github给的仓库的地址前缀是git@github.com,这里把git@github.com替换成labno3,因为在前面SSH Config配置文件里配置了一个Host为labno3的配置,这个Github账号的SSH key的公钥和labno3配置项的私钥是一对的,这样ssh就可以通过匹配labno3来找到这个配置项。
执行下面的命令添加远程仓库:
git remote add origin labno3:labno3/test.git
创建一个README.md文件,然后提交推送到远程仓库。
echo "# test" >> README.md
git add README.md
git commit -m "first commit"
git branch -M main
git push -u origin main
输出结果如下,说明一切正常。
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 210 bytes | 210.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To labno3:labno3/test.git
* [new branch] main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
另外一个账号也按照同样的操作。
到这里在同一个电脑上管理不同的github账号的任务就完成了,原理就是利用ssh的config配置,通过Host匹配让ssh使用正确的私钥去和Github交互,如果我这里有什么遗漏和错误,或者您有什么疑问,欢迎在下面留言讨论。
欢迎转载,请留下出处链接:Labno3 » 如何在同一台电脑上管理多个Github账号的仓库