GitHub 為了安全性議題,已從 2021/08/13 強制要求用戶登入 (authentation) 機制只能採用 SSH 或 Persoan access token,傳統使用賬號/密碼登入方式已不再支援。可參考:「Token authentication requirements for Git operations」。
關於 PAT (Personal Access Token) 具體相關操作,可參考官網文件:「Creating a personal access token」。但該方式還要做相關的權限設定,實在麻煩,所以使用 SSH 登入只要做一次設定相關方便許多。關於 GitHub 使用 SSH 相關設定,可參考國外這篇文章,包括基本原理都有說明,值得參考收藏:「How to Generate SSH Keys for GitHub」。
已安裝好原生 Git,並使用內建的 Bash 終端機,執行「ssh-keygen」命令,如在 Win10 環境下,即會在「/Users/login-account/.ssh」資料夾內 (若為 Linux 則為 ~/.ssh) 產生公/私鑰,然後再把公鑰內容複製貼上至 Github → Setting → SSH and GPG Keys 內所新增的 Key 內容即可,就可以使用 SSH 連線,相當簡單。
如果只使用原生 Git Bash 透過 SSH 連線 Clone 遠端 GitHub 儲庫就可以正常存取了,但是若透過 SourceTree 卻需要另一番設定方可 (而且還有些繁瑣),主要原因是 SourceTree 目前版本只支援使用 PuTTY 格式所儲存的 Key,所以要嘛先透過已有安裝的 PuTTY (或 WinSCP) 設定好 SSH,否則就需在該應用程式內執行下述設定。
打開 SourceTree,在選單上點選「Tools」 → 「Create or Import SSH Keys」,在出現的對話框內,再點選選單上的「Conversions」→ 「Import Key」,然後選擇位於上述賬戶位置「/.ssh」 內原來所產生的私鑰檔案 (預設檔名為 id_rsa)。
點擊〔開啟〕回至原來的對話框,就會出現載入私鑰相關資訊,然後再點擊〔Save private key〕按鍵,將該金鑰儲存成 PuTTY 格式的私鑰檔案。可以將該檔案儲存在與原來公/私鑰所在的賬戶內 (~/.ssh) 位置內。
完成後回至 SourceTree 主畫面,然後在選單點選「Tools」→「Options」,在出現的對話框內的「SSH Client Configuration」欄位區內選擇載入所儲存的 PuTTY 格式的私鑰檔案。
到此應該算是完成 SSH 連線的設定了!但是當透過 SourceTree 透過 SSH 連線至 GitHub 執行 Clone 時卻仍然出現了下列錯誤訊息:
git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin
The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 aa:d1:aa:00:bb:c0:b0:a0:d0:e0:f0:a0:a1:00:11:ee
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
大致意思是說密鑰資訊沒有被儲存在緩存 (cache) 內。可以透過 SourceTree 已內含的「plink」工具 (需打開 Command Prompt 執行) 將密鑰緩存。參考「Auto-storing server host key in cache with plink」,內有詳細的設定說明。
echo y | plink -ssh root@REMOTE_IP_HERE "exit"
總算確實可以在 SourceTree 透過 SSH 連結 GitHub 操作 Git 了!
在 SourceTree 上使用 SSH 設定上實屬繁瑣,所以只好筆記設定摘要。不過這麼好用的 Git GUI 工具還是應該要改善簡化下相關連接結設定的。
※ 延伸參考
o Git clone / pull continually freezing at "Store key in cache?"
o SSH 的原理與應用。