[Git] 多個SSH Key與帳號的設定(Mac)

  • 16409
  • 0
  • Git
  • 2018-05-02

個人github帳號?公司github帳號? 都使用SSH時的設定辦法

若有需要在同一台電腦使用多個不同帳號或空間時可以由以下的方式來設定個別帳號對應的SSH Key,這邊先假設了三組資料以方便下面的舉例。

Email 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

https://medium.com/@awonwon/how-to-setup-ssh-config-%E4%BD%BF%E7%94%A8-ssh-%E8%A8%AD%E5%AE%9A%E6%AA%94-74ad46f99818

 

 

如有錯誤煩請不吝指教~~

----------------------------------------------

技術

是需要不斷的訓練

建立絕對的信心

就會在直覺出現的那一刻

毫不猶豫的出手