Github的SSH-KEY配置

本文最后更新于:2022年5月29日 上午

同一个Github账号下不同仓库使用不同的SSH KEY,或者一台机器上管理多个Github帐号的SSH Key配置操作

作者:黑夜之旅
链接:https://www.jianshu.com/p/ddd3122cb351
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

生成SSH Key

1
2
3
ssh-keygen -t rsa -C "your_email@example.com"
# 或者指定生成文件名
ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/id_rsa_2

一台机器上管理多个Github帐号的SSH Key

如果你在一台机器使用两个github账号(比如私人账号abc和工作账号xyz),两个帐号用不同的SSH KEY,或者同一个Github账号下不同仓库使用不同的SSH KEY,还需要编辑一下配置文件~/.ssh/config:

1
2
3
4
5
6
7
8
9
Host personal.github.com  
HostName github.com
User git
IdentityFile ~/.ssh/personal_rsa

Host work.github.com
HostName github.com
User git
IdentityFile ~/.ssh/work_rsa

解释此配置文件:

  • Host: “personal.github.com”是一个”别名”,可以随意命名, 像github-PERSONAL这样的命名也可以;
  • HostName:比如我工作的git仓储地址是git@code.sohuno.com:username/repo_name.git, 那么我的HostName就要填”sohuno.com”;
  • IdentityFile: 所使用的公钥文件;

配置完毕,用下面的命令测试一下:

1
2
3
ssh -T git@personal.github.com
ssh -T git@work.github.com
# 注: @符号后面的"personal.github.com"就是在~/.ssh/config文件中指定的"Host"项

(1)为已经检出的repos指定github账号:

在已经检出的repos目录下执行:

1
2
git config user.name "your-id"
git config user.email "your-id@gmail.com"

修改.git/config并找到[remote "origin"],修改url的值为:

1
2
[remote "origin"]   
url = git@personal.github.com:user_name/repos_name.git

其中, personal.github.com就是在配置文件~/.ssh/config中的Host项, 设置完成后, 在这个工程目录git push会自动以此git帐号提交代码。

(2)使用指定账号clone已存在的repos:

  1. 使用指定账号clone一个已经存在的repos:
    git clone git@personal.github.com:user_name/repos_name.git, 上面命令中的”personal.github.com”就是在~/.ssh/config文件中指定的”Host”项, “user_name”是指定提交代码的账户名, 例如:

git clone git@personal.github.com
Cloning into ‘Vimrc’…

  1. 然后还需要config一下user.name和user.email, 进入repos目录执行:
1
2
git config user.name your_name
git config user.email your_email

以后在此repos下git push origin master就是使用指定的用户push.

(3)使用指定账号init新的repos:

如果是新建一个仓储:在github.com创建一个新repos,

1
2
3
4
5
$ git init
$ git add .
$ git commit -m "first commit"
$ git remote add origin git@personal.github.com:user_name/testing.git
$ git push -u origin master

上面命令第4行: “personal.github.com”就是在~/.ssh/config文件中指定的”Host”项, “user_name”是指定提交代码的账户名.