關於 web service, unity, blogger 等軟體工程筆記

Github SSH 連線設定,確保 Mac SourceTree 正常運作

Edit icon 沒有留言
SSH Key

前陣子在 Mac 上使用 SourceTree 這套 GUI 工具來管理 Github repositories,但由於帳號因安全性考量改用 2FA (Two-factor authentication) 認證後,原先在 SourceTree 採用 HTTPS 利用帳號密碼登入的方式已不可行,因此研究利用 SSH pub key 登入設定,並且整理成此筆記。

不採用 SourceTree 提供的 GUI 工具來設定 SSH,而是回歸到 OS 本身,利用 command line 方式進行,對於以及不甚熟悉 Unix-like 作業系統的自己來說,在這次操作中學習到更多關於 SSH Key 管理的知識啊。

注意:環境為 Mac version 10.13.6

首先先確認使用者目錄,以下範例皆採用自身電腦的設定,應當根據當下環境進行適當調整,例如使用者 siyuan 應當改成自己的帳戶名。

$ cd ~ && pwd
/Users/siyuan

Generate SSH Keys

第一步先產生 SSH Key,使用 ssh-keygen 產生長度為 4096 bytes 的公開/私密金鑰 (public and private keys),期間需指定儲存位置,並且沒有額外設定密碼:

$ ssh-keygen -t rsa -b 4096 -C “siyuan@twsiyuan.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/siyuan/.ssh/id_rsa): /Users/siyuan/.ssh/github
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in github.
Your public key has been saved in github.pub.
The key fingerprint is:
SHA256:G+Y+qiJTzvLW+MidwMArUngAM7VFf62R5y19XeaodMk 
The key's randomart image is:
+---[RSA 2048]----+
|+...o            |
|.o o .   o       |
|. .   . + o     o|
|.o     . = o . *.|
|o.o     S o + E o|
| =o    o o o +   |
|o=oo    o   .    |
|*.*+.. ..        |
| *+o=.....       |
+----[SHA256]-----+

要注意的是該金鑰不覆蓋預設的金鑰 /.ssh/id_rsa,而是改名字存成另外一把鑰匙,以期許未來在帳戶管理多把金鑰。

使用以下指令來檢查金鑰檔案是否存在:

$ ls ~/.ssh/
github        github.pub    known_hosts

接著設定 /.ssh/config,使得 ssh 在連線到 Github 時,能夠使用指定的那把私密金鑰進行認證:

使用 vi 進行檔案編輯:

vi ~/.ssh/config

在檔案內容加入以下設定,注意私密金鑰位置應根據當下環境調整:

Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile /Users/siyuan/.ssh/github

最後複製公開金鑰 github.pub 的內容,待會在 Github 網頁管理介面上,新增 SSH Keys 時使用。

$ cat ~/.ssh/github.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDS4L1VxXK6y7i2PFONrhv+yG2jfy9HF6DB7m3geu6QZItSBTorJxlMxRNYFzBOLZ+oPi/OODmO/woO8HzVBluyZJSkQjRG1zs1Sua2e5mdO67Rtrwy7cY2VyrNVlJVCxdfQL8UcEF/+K7p2LO8idaFOE1Me4zSBgcwd5h6T6/LXkuMAxjKVqE1OOBhiU8Dlwi/tn/2nzEt4Oblf1YAd9RiPRCG9s51zD8XMML2axovTx8cUntcI0fQWA/QczIhYcl1qJG5Dp5mwr2AdekZn/e8FufPslI01d4UtcZOFb9KTMv3ObMDl5SfeKVxCniz0f4lzt+F89CovARCfK3zcy7r siyuan@twsiyuan.com

Github SSH key setup

登入 Github 網頁版,在以下路徑找到新增 SSH Key 選項:Account > Personal Settings > SSH and GPG keys > New SSH key,或是直接前往 https://github.com/settings/keys,並且貼上上節複製的公開金鑰內容。

以上便完成所有設定,接著進行設定檢查,透過以下指令進行連線測試,若是在第一次會詢問是否要連線該未知的主機:

$ ssh -T git@github.com
The authenticity of host 'github.com (IP ADDRESS)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? 

輸入 yes 繼續,成功會出現以下訊息:

Hi siyuan! You've successfully authenticated, but GitHub does not provide shell access.

反之若設定不正確會出現拒絕的訊息:

$ ssh -T git@github.com
git@github.com: Permission denied (publickey).

這時候就得開始偵錯啦,利用 -v 印出連線是使用哪把 Key,以進行進一步的問題排除:

$ ssh -v git@github.com

就此設定完成,不需要在 SourceTree 介面中進行帳號管理介面的設定,便可以直接對該帳號的 Github repositories 進行操作。

但如果在 Mac 上使用不同的 Github 帳號,切換管理不同的 repositories,那會是另外一個問題呢。

Reference

沒有留言: