背景
通常我們有使用 Github、Gitlab,當 Github 或 Gitlab 下有多個賬號,你會發現你的 ssh key 不夠用了,因爲站點會給你個提示:
ssh key already in use github
這個時候我們可以採用如下做法
- 生成多個公鑰/私鑰對
- 對不同的域名配置不同的私鑰
實操
- 生成多個公鑰/私鑰對
ssh-keygen -t rsa -C "你的郵箱"
用不同的郵箱創建不同的公鑰/私鑰對
- 添加私鑰
ssh-add '私鑰路徑'
ssh-add 提示並將用戶的使用的私鑰添加到由ssh-agent 維護的列表中. 此後, 當使用公鑰連接到遠程 SSH 或 SCP 主機時,不再提示相關信息
- 創建配置文件
在 .ssh 目錄創建 config 文件,配置如下內容
# gitlab
Host git.iboxpay.com
HostName git.iboxpay.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# github
Host github2.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/feygh
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
這個配置文件中 Gitlab 下的 ssh 通信都走 id_rsa 公鑰加密,所以你在 Gitlab 倉庫中要複製 id_rsa 這個公鑰過去;
值得注意的是,這裏有兩個 Github 配置,仔細觀察下 HostName 都是 github.com,但是 Host 不一樣,這就是關鍵之處。
大家回憶下我們是怎麼 clone Github 的?
[email protected]:username/projectname.git
分析這個地址 [email protected] 告訴 ssh 要登錄的主機,username 和 projectname 看字面意思就理解,不贅述。
在這個配置文件中 Host 就是和 github.com 這個對應,HostName 是真實的物理連接 Host。
如果大家這麼 clone Github:
[email protected]:username/projectname.git
那麼進行這個 ssh 連接的時候,會命中 ssh config 中 Host 爲 github2.com 的配置,反過來亦然。也就說你在 clone Github 另一個項目的時候要手動修改下地址爲上述地址即可。