Pages

Thursday, 26 April 2012

多个github帐号的SSH key切换

多个github帐号的SSH key切换

github使用SSH与客户端连接。如果是单用户(first user),生成密钥对后,将公钥保存至github, 每次连接时SSH客户端发送本地私钥(默认~/.ssh/id_rsa)到服务端验证。 单用户情况下,连接的服务器上保存的公钥和发送的私钥自然是配对的。

但是如果是多用户(first user,second user),我们在连接到second user的帐号时, second user的github空间里保存的是自己的公钥,但是SSH客户端依然发送默认的私钥,即first USER的私钥, 那么这个验证自然无法通过。 不过,要实现多帐号下的SSH key切换,只需在客户端(这里的“客户端”是linux vps.linux vps相对于github空间而言仍然是客户端)做一些配置即可。

首先cd到~/.ssh/,使用 ssh-keygen -t rsa -C 'second@mail.com' 生成新的SSH key:id_rsa2,
(示例:
as3:~/.ssh# ssh-keygen -t rsa -C 'surmountain@gmail.com'
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/id_rsa2     Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa2.
Your public key has been saved in /root/.ssh/id_rsa2.pub.)
生成完后,将新的SSH public key添加到github。


完成以上步骤后在~/.ssh目录创建config文件,该文件用于配置私钥对应的服务器。内容如下:
# Default github user(first@mail.com)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa

# second user(second@mail.com)
Host github-second
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa2

配置完成后,在连接非默认帐号的github仓库时,远程库的地址要对应地做一些修改, 比如现在添加second帐号下的一个仓库origin,则需要这样添加:
git remote set-url origin git@github-second:username2/username2.github.com.git
而非原来的git remote set-url origin git@github.com:username2/username2.github.com.git

这样每次连接都会使用id_rsa2与服务器进行连接。至此,大功告成!

注意: github根据配置文件的user.email来获取github帐号显示author信息, 所以对于多帐号用户,一定要记得将user.email改为相应的email(second@mail.com)。

参考github帮助文档: