Set multiple ssh-key for different github accounts
Pre
使用github pages搭建博客的时候突发奇想新建一个账户。
原因是pages域名直接和你的账号名挂钩,一是直觉上让我不舒服,二是想换个别的名字。
Issue
新建账户很简单按流程操作,不过当添加ssh-key的时候遇到了问题。
意思这个key已经被添加进github过了。github规定一个key只允许被一个账户使用,只能添加一次,就是说不同的账户必须用不同的key。
Solution
解决思路也很简单,就是在新建另外一个key用于新建的账号。
不过有个问题要注意下,那就是当我们电脑中只有一个ssh-key的时候可能一路默认配置就完事了,但是当存在多个key的时候怎么在不同情况下使用特定的key呢?
答案是ssh-agent以及ssh的config文件,它们就是用来控制ssh相关的种种行为的。
Steps
生成key,注意保存为新的rsa文件,防止覆盖了你的原先的。
1 | $ cd ~/.ssh |
将key 加入ssh-agent
1 | eval "$(ssh-agent -s)" |
Edit config file
为新的账号配置进行连接要使用的key。
1 | Host new.github.com |
这里解释下Host和HostName的作用,
Host是你进行连接时你输入给系统的字面值,系统会根据Host来找到HostName,实际连接用的是Hostname的值。
看一段解释
1 | "About difference between host and hostname" |
有可能你会疑惑为什么要多此一举,直接HostName不就行了?
事实一般也确实没有要多一道这个转换的,所以一般情况下这两个值是一样的。不过有时候这个设置会很有用,比如现在我们遇到的情况:
我们要区分的两个账号都是github账号,没有办法按照域名来区分,虽然我们知道哪个仓库该用哪个地址,但是对系统来说都是连接的同一个Host,也只会使用同一个ssh-key,这样会因为key不对而连接失败。
这时候Host就派上用场了,注意我上面配置文件里,Host写的是new.github.com,但是HostName是github.com。
当我连接新账号的仓库时我会这么写,git clone git@new.github.com:****/*****.git
当我连接旧账号的仓库时我会这么写,git clone git@github.com:****/*****.git
它们实际上都还是连接的正常的github.com,但是会使用不同Host里的配置,从而使用不同的key,这样就成功进行了区分。
Add Public key to your new created account
cat ~/.ssh/id_rsa_new.pub | pbcopy .
Test
1 | $ ssh -T git@github.com |
⚠️ Pay Attention When Use
当你想使用新账户下仓库时,你连接时写的仓库url就需要改成Host的值, 上面提到过