個人github帳號?公司github帳號? 都使用SSH時的設定辦法
若有需要在同一台電腦使用多個不同帳號或空間時可以由以下的方式來設定個別帳號對應的SSH Key,這邊先假設了三組資料以方便下面的舉例。
UserName | 空間 | |
aaa@gmail.com | Hi_AAA | github |
bbb@gmail.com | Hi_BBB | github |
aaa@gmail.com | Yo_AAA | bitbucket |
步驟1:產生SSH Key
打開終端機並使用以下指令
ssh-keygen -t rsa -C "aaa@gmail.com"
**將aaa@gmail.com替換成你的Email**
之後會遇到第一個輸入,這邊是要輸入你的檔案要存的名字,這邊就輸入"id_rsa_aaa_github"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/XXX/.ssh/id_rsa): id_rsa_aaa_github
再來就是設定私鑰的密碼,這邊就直接Enter兩次跳過。完成如下
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/XXX/.ssh/id_rsa): id_rsa_aaa_github
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa_aaa_github.
Your public key has been saved in id_rsa_aaa_github.pub.
The key fingerprint is:
SHA256:mw+sEk4jff/cG61nLwmyFrxELRoL+K+IpifBcW9Ss7E aaa@gmail.com
The key's randomart image is:
+---[RSA 2048]----+
| . . . |
| E. . . o . |
| *. . = - . |
| . + o. o . = . .|
|. o o .S. o . ..|
|.. .oo o o o|
| . . .o= + . ++|
|. = . o.... o.B|
|.+ .ooo .=+|
+----[SHA256]-----+
完成後進入 ~/.ssh/ 可以找到剛剛產生的私鑰(id_rsa_aaa_github)及公鑰(id_rsa_aaa_github.pub)兩個檔案,到這邊第一步就算是完成了。
步驟2:將公鑰放到要設定的空間中
將上一步資料夾中的公鑰(有pub副檔名那個)內容全部複製起來並將公鑰加入該帳號的空間中,以下Google找了常用的幾個空間的個人SSH設定方法。
Github https://help.github.com/articles/adding-a-new-ssh-key-to-your-github-account/
Bitbucket https://confluence.atlassian.com/bitbucketserver/ssh-user-keys-for-personal-use-776639793.html
Gitlab https://docs.gitlab.com/ee/gitlab-basics/create-your-ssh-keys.html
以這次範例為例的話,有三組資料就要每一次重新再從步驟1開始設定。
步驟3:加入設定檔
為了讓git識別每一個空間對應的key就需要有一個設定檔
首先先進入 ~/.ssh/ 資料夾中
cd ~/.ssh
使用 vim 建立一個名為 config 的檔案
vi config
依照以下格式設定
Host | 連線至遠端的別稱(可以隨便填) |
HostName | 遠端的Domain或IP |
Port | 遠端的SSH連接埠(為預設的話可以不填) |
User | 使用者名稱 |
PreferredAuthentications | 偏好使用的驗證(這邊的值都為publickey) |
IdentityFile | 私鑰的位置(可為相對或絕對位置,但建議使用絕對位置) |
以下是範例完整的config內容
Host gh.aaa.my
HostName github.com
User Hi_AAA
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_aaa_github
Host gh.bbb.company
HostName github.com
User Hi_BBB
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_bbb_github
Host bb.aaa.my
HostName bitbucket.org
User Yo_AAA
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_aaa_bitbucket
以 aaa@gmail.com 在github為例,在經過上面的設定檔後,repository的位置有以下變化
原本 | 後來 |
git@github.com:Hi_AAA/my_project.git | git@gh.aaa.my:Hi_AAA/my_project.git |
Domain的部分可以使用設定檔的 Host 名稱取代
存檔後設定檔的部分就完成了。
步驟4:將Key加入ssh-agent控管
使用指令 ssh-add <private_key_path> 將ssh key加入管理
例如:
ssh-add ~/.ssh/id_rsa_aaa_github
將key加入後會得到以下的成功訊息
Identity added: /Users/XXX/.ssh/id_rsa_aaa_github (/Users/XXX/.ssh/id_rsa_aaa_github)
步驟5:嘗試使用ssh連線
使用下方的命令以嘗試連線到伺服器
ssh -T git@gh.aaa.my
如果是第一次輸入則會有以下的詢問
The authenticity of host 'github.com (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is SHA256:zcXQOSSRBRiUtuE8AikJYKwbHaxvSc0ojez0YXaGp2B.
Are you sure you want to continue connecting (yes/no)?
請輸入 yes 以繼續,結果會如下。
The authenticity of host 'github.com (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is SHA256:zcXQOSSRBRiUtuE8AikJYKwbHaxvSc0ojez0YXaGp2B.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com (xxx.xxx.xxx.xxx)' (RSA) to the list of known hosts.
logged in as Hi_AAA.
You can use git or hg to connect to Github. Shell access is disabled.
確認 logged in as Hi_AAA 就表示這個 Domain(git@gh.aaa.my) 在github中對應到的是 Hi_AAA 這個使用者。跟我們預想要設定的使用者一樣就是成功了。但如果出現不是我們預想的使用者名稱,則可能是設定檔或中間的過程有打字錯誤。
步驟6:建立其他使用者
回到步驟1就可以繼續加入其他的使用者與SSH Key
在建立的時候如果有遇到明明輸入正確但一直卡關的狀況可以進行以下嘗試:
1. 用以下的指令刪除所有ssh-agent管理的key,並重新回到步驟4再重新加入一次
ssh-add -D
2. 移除known_hosts檔案
將資料夾 ~/.ssh/ 中的 known_hosts 檔案移除並回到步驟5重新試一次
3. config中的IdentityFile使用絕對位置
參考資料:
http://blog.alantsai.net/posts/2016/03/ssh-config-ssh-agent-passphrase-management
如有錯誤煩請不吝指教~~
----------------------------------------------
技術
是需要不斷的訓練
建立絕對的信心
就會在直覺出現的那一刻
毫不猶豫的出手