在我們使用 Github 做為我們的遠端平台的時候,會發現有所謂的 〝HTTPS〞和 〝SSH〞 兩種遠端建立連結的方式,如下圖所示:
當我們選擇 https 時候,在進行 git push -u origin master 的時候,會出現要您輸入 GitHub 帳號、密碼的訊息,只要上傳一次,便要輸入一次,長久下來其實也很麻煩,那有沒有不需要每次都輸入的方法呢?〝答案是有的〞,方就是是我們今天要講的主題〝SSH Key〞。也就是上圖的 SSH 方法的連接。
在這邊提供 Mac 的設定方式, Windows 也是大同小異,在這邊就不示範了;我們一樣透過實作的方式來練習。
■ 建立 ssh key 連線
◆ 建立 ssh key
以 MAC 為例,先產生 SSH-Key。
1 |
之後會遇到第一個輸入,這邊是要輸入你的檔案要存的名字,若不輸入,預設名稱則為 id_rsa,在這邊假設輸入為〝 gimmy-github 〞
1 2 3 |
Generating public/private rsa key pair. Enter file in which to save the key (/Users/gimmy/.ssh/id_rsa): |
第二個輸入,則是輸入 rsa_key 的密碼 ( 需輸入兩次 ),可以直接不輸入,若輸入,則每次使用 rsa_key 的時候,都需輸入密碼才能使用。
1 |
Enter passphrase (empty for no passphrase): |
看到以下文字之後,即代表完成!
完成之後,完成後進入 ~/.ssh/ 可以找到剛剛產生的私鑰 ( gimmy-github ) 及公鑰 ( gimmy-github.pub ) 兩個檔案,到這邊第一步就算是完成了。
◆ 將公鑰放到要 Github 的空間中
連入到 Github 空間之後。
- 點選右邊圖示主選單,點選「Setting」。
- 選擇 [ SSH and GPG keys ]
- 再點選 new SSH key
如下圖所示:
在選單中,輸入 ssh key 的名稱,還有 rsa-key.pub 的內容,送出即可。
◆ 備註:
若因為非預設的 id_rsa 名稱,則可能會顯示無權限可以上傳,因為預設路徑沒抓到,請在 ~/.ssh/ 建立 config 檔,並指定其 rsa_key 路徑,詳細建立方法,可參照下面 「多 github 帳號連線」連線設定。
■ 多 github 帳號連線
若您擁有多個 github 帳號,則因為一台電腦上有一個 ssh key,在 github 上提交代碼,
由於其他原因 ( 可能因為工作上有其他的 Github 帳號 ) 你可能會在一台電腦上提交到不同的 github 上,怎麼辦呢?
假設你電腦上一個ssh key 已經有默認的一個了,請直接生成第二個。
◆ 建立 ssh key
( 同上方法,在此省略 )
◆ 加入 ssh-add 清單
舉例來說,你有兩個 ssh keys :
1 2 3 |
~/.ssh/gimmy-github ~/.ssh/id_rsa_gimmy2 |
則把這兩個 rsa-keys 加入清單中
hen, add these two keys as following
1 2 3 |
ssh-add ~/.ssh/gimmy-github ssh-add ~/.ssh/id_rsa_gimmy2 |
◆ 備註:
如果你之前已經加入過了,可以先透過 ssh-add -D 先清空刪除,再來重新加入。
1 |
ssh-add -D |
最後,你可以透過 ssh-add -l 指令進行確認是否有加入成功。
1 |
ssh-add -l |
—
1 2 3 |
2048 SHA256:n1240KpGf8W5WlnI33k1XAaooXeVpJMrj0Wtj4P1u4 xxx@gmail.com (RSA) 2048 SHA256:1216DHczeMzB0o/OwnA09pWnitihhy/vqDZeJ8WPbI xxx@gmail.com (RSA) |
◆ 建立 config 檔 ( 指定 ssh-key 路徑 )
1 2 3 4 5 |
cd ~/.ssh/ touch config nano config |
再檔案內新增:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 公司工作用的 GitHub 帳號 - id_rsa_gimmy2 Host github.com-id_rsa_gimmy2 HostName github.com User git AddKeysToAgent yes UseKeychain yes PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_gimmy2 # 自用用的 GitHub 帳號 - gimmy-github Host github.com-gimmy-github HostName github.com User git AddKeysToAgent yes UseKeychain yes PreferredAuthentications publickey IdentityFile ~/.ssh/gimmy-github |
存檔之後,即可完成。
◆ config 設定參數說明
Host | 連線至遠端的別稱(可以隨便填) |
HostName | 遠端的 Domain 或 IP |
Port | 遠端的SSH連接埠 ( 為預設的話可以不填 ) |
User | 使用者名稱 |
PreferredAuthentications | 偏好使用的驗證 ( 這邊的值都為 publickey ) |
IdentityFile | 私鑰的位置 ( 可為相對或絕對位置,但建議使用絕對位置 ) |
■ 測試 GitHub 連線 ( Testing your SSH connection )
1 |
ssh -T git@github.com |
如果是第一次輸入則會有以下的詢問:
1 2 3 4 5 |
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 以繼續,結果會如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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. |