一臺(tái)電腦, 多個(gè)github帳號(hào)的SSH key切換, 更新多個(gè)hexo博客
github賬號(hào),工作有一個(gè),自己有一個(gè)。但是默認(rèn)下使用ssh key在git push時(shí)只有默認(rèn)賬號(hào)能免輸入賬號(hào)和密碼。
- 如果你建立并配置了.ssh/config文件后, 但卻不知道怎么使用。這篇文章是為你準(zhǔn)備的。
1. 打開終端,進(jìn)入ssh根目錄下
cd ~/.ssh/
2.創(chuàng)建新的 私鑰/公鑰, 并指定秘鑰名稱, 如 kentsun_rsa
- 使用一下命令行, 然后兩次回車即可.
ssh-keygen -t rsa -f ~/.ssh/隨便名字_id_rsa -C "yourmail@xxx.com"
- 或者使用下面命令行創(chuàng)建秘鑰, 需要三次回車, 但是第一次回車需要輸入秘鑰名字.
ssh-keygen -t rsa -C "yourmail@xxx.com"
- 注意:這次創(chuàng)建新的秘鑰 ,不要再三次回車了, 要在第一次回車的地方,填入新秘鑰名字, 如果不填將使用默認(rèn)的id_rsa , 會(huì)將原來(lái)的ssh_key覆蓋. 新秘鑰名后面建議加
_rsa或者id_rsa.

sshkey2.png
3.配置config
如果 ~/.ssh/根路徑下, 沒有config, 則創(chuàng)建一個(gè)config文件
touch config
- config配置如下, 第一個(gè)為原來(lái)的ssh key配置, kentsun為新的ssh key配置
#第一個(gè)賬號(hào),默認(rèn)使用的賬號(hào)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
# 第二個(gè)賬號(hào) kentsun
Host kentsun.github.com # kentsun為前綴名,可以任意設(shè)置
HostName github.com
User git
IdentityFile ~/.ssh/kentsun_rsa
- 我們指定 kentsun.github.com 這個(gè)"作用域"下的ssh連接統(tǒng)一指向 github.com ,并且使用之前生成好的 github_rsa 這個(gè)密鑰加密。
- 默認(rèn)的使用 ~/.ssh/id_rsa 這個(gè)密鑰加密
原理分析:
- 1.ssh 客戶端是通過類似 git@github.com:githubUserName/repName.git 的地址來(lái)識(shí)別使用本地的哪個(gè)私鑰的,
地址中的 User 是@前面的git, Host 是@后面的github.com。 - 2.如果所有賬號(hào)的 User 和 Host 都為 git 和 github.com,那么就只能使用一個(gè)私鑰。
所以要對(duì)User 和 Host 進(jìn)行配置,讓每個(gè)賬號(hào)使用自己的 Host,每個(gè) Host 的域名做 CNAME 解析到 github.com,
如上面配置中的Host kentsun.github.com。 - 3.配置了別名之后,新的地址就是git@kentsun.github.com:githubUserName/repName.git。
這樣 ssh 在連接時(shí)就可以區(qū)別不同的賬號(hào)了。
4.設(shè)置新github賬戶SSH key
最終會(huì)生成一個(gè)文件在用戶目錄下,打開用戶目錄,找到.ssh\kentsun_rsa.pub文件,記事本打開并復(fù)制里面的內(nèi)容,打開你的github主頁(yè),進(jìn)入個(gè)人設(shè)置 -> SSH and GPG keys -> New SSH key:

github-sshkey.png
將剛復(fù)制的內(nèi)容粘貼到key那里,title隨便填,保存。
5.在.ssh根目錄下, 清空本地的 SSH 緩存,添加新的 SSH 密鑰 到 SSH agent中
cd ~/.ssh
ssh-add -D
ssh-add id_rsa
ssh-add id_rsa_second
- 最后確認(rèn)一下新秘鑰已經(jīng)添加成功
ssh-add -l
6.輸入指令, 驗(yàn)證配置是否成功
- 默認(rèn)ssh_key驗(yàn)證
ssh -T git@github.com
- 新ssh_key驗(yàn)證, 新秘鑰名替換username
ssh -T git@username.github.com
- 如下提示信息, 則配置成功
$ ssh -T git@github.com
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
7.進(jìn)入各自項(xiàng)目文件夾,單獨(dú)設(shè)置用戶名/郵箱
- 注意:如果有多個(gè)賬號(hào),建議使用局部的。
# 取消全局 用戶名/郵箱 配置
git config –global –unset user.name
git config –global –unset user.email
# 單獨(dú)設(shè)置每個(gè)repo 用戶名/郵箱
git config user.name "用戶名" //在config后加上--global即全局
git config user.email "郵箱"
- 查看設(shè)置是否成功
git config --list
8.最后在 hexo 配置文件修改git地址
deploy:
type: git
repository: git@username.github.com:githubUserName/githubUserName.github.io.git
branch: master
- repo配置相當(dāng)于在原來(lái) git倉(cāng)庫(kù)地址中添加了Host名字 kentsun, 其他不變.
可參考我的:
deploy:
type: git
repo: git@kentsun.github.com:KentSun/KentSun.github.io.git
branch: master
配置多個(gè)git賬戶重復(fù)以上步驟。
修改remote 作用域
+ 最后修改一下我們?cè)?kentsun 克隆下來(lái)的項(xiàng)目的 remote “作用域” 。
$ git remote rm origin
$ git remote add origin git@kentsun.github.com:kentsun/123.git // 注意是 kentsun.github.com
$ git push origin master
Everything up-to-date