同一机器配置多个GitHub账号
在同一机器上对不同repo使用不同的github账号是个常见需求。举个例子,repo1
托管在github账号x1
下,而repo2
托管在账号x2
下,如何方便地在同一机器上使用不同账号自动git push
到对应的远端?比较直接的做法是在不同repo目录下使用git config
配置用户名,但这样有两个问题:
- 每个repo都要配置一遍比较繁琐
- 有些情况下无法配置。比如使用 hexo-deployer-git
部署Hexo网站时,
.deploy_git
目录是动态生成的,而所用的git账户和远端url修改不便。
于是,我们可以借用SSH
config文件来把不同github账号与repo联系起来。在SSH
config中定义多个不同的host项即可,然后在访问github时,使用一个虚拟host作为别名代替真正的主机名github.com
即可。
生成SSH Key
直接按步骤来即可: # Generating a new SSH key and adding it to the ssh-agent
$ ssh-keygen -t ed25519 -C "your_email@example.com"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256: xxx your_email@example.com
Add your SSH private key to the ssh-agent:
$ ssh-add ~/.ssh/id_ed25519
Identity added: /home/user/.ssh/id_ed25519 (your_email@example.com)
添加公钥到GitHub账户
按Tutorial步骤来,点点鼠标复制粘贴即可: # Adding a new SSH key to your GitHub account
拷贝公钥:
$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 xxxx your_email@example.com
然后把公钥通过GitHub配置页添加至账户: Profile Photo -> Settings -> SSH and GPG keys -> New SSH keys
编辑SSH Config
这是最重要的的部分,编辑 ~/.ssh/config
(不存在则创建一个):
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
Host githubx1
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_x1
Host githubx2
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_x2
各字段的解释:
- Host: 主机别名,也是每段定义项的名字,将来用这个别名来指代所用的用户名及私钥
- HostName: 要登录的远端主机名
(对github来说就是
github.com
) - User: SSH连接所用的用户名 (对github来说就是
git
) - IdentityFile: 上面生成的私钥
假设上面示例文件中的私钥和账户对应关系如下:
id_rsa
->main@example.com
id_rsa_x1
->x1@example.com
id_rsa_x2
->x2@example.com
一个repo的远端url大概长这样:
git@github.com:finisky/TextCNN.git
对于无SSH config或上面的示例配置,使用上面url
(github.com
)
进行访问时,使用的是账户main@example.com
。如果我们想用x1@example.com
来访问此repo,需要将它的主机名改一下,与SSH
config中的配置相对应:
git@githubx1:finisky/TextCNN.git
测试连接
验证上面配置是否生效也很简单,使用下面命令测试即可:
$ ssh -T git@githubx1
Hi x1! You've successfully authenticated, but GitHub does not provide shell access.
$ ssh -T git@githubx2
Hi x2! You've successfully authenticated, but GitHub does not provide shell access.
$ ssh -T wrongusername@githubx2
wrongusername@github.com: Permission denied (publickey).
如果登录成功,Hi之后会显示对应登录账户的GitHub用户名。