Git ssh 金鑰設定
有些情況下我們需要使用或編寫個人未公開的專案,這時候pull或者push就會需要密碼, 但是有些時候輸入帳號密碼可能會造成一些不必要的麻煩,因此使用GitHub的ssh方式去連結repository就是一個方便的方式。
Git ssh功能介紹
Git 使用SSH (Secure Shell) 提供一種加密機制,用於在您的電腦和遠端Git 伺服器(如GitHub)之間安全地進行連線和資料傳輸,而無需每次都輸入帳號密碼。 SSH 連線透過生成一組公鑰和私鑰來驗證您的身分。 您將公鑰添加到Git 伺服器,而私鑰則保留在您的本地電腦上。 之後,伺服器會利用您上傳的公鑰來驗證透過私鑰發出的請求,實現安全且便捷的程式碼存取。
1.建立ssh key
首先,我們需要先產生 ssh key,這個 key 會被存在 `~/.ssh` 資料夾中,使用以下指令建立
- 對Linux系統來說,“.”開頭的文件或資料夾是預設隱藏的檔案,可以透過指令
ls -a強制顯示
ssh-keygen -t ed25519 -C "[email protected]" ed25519 是較新的演算法,如果電腦不支援的話需要使用以下另一種演算法生成
ssh-keygen -t rsa -b 4096 -C "[email protected]"ssh-keygen中常用參數如下-t:指定金鑰的加密演算法,預設使用 SSH2d 的 rsa。-f指定金鑰的檔名,預設檔名會隨演算法而變動,例如使用 rsa 加密時,其檔名預設為id_rsa(私鑰id_rsa,公鑰id_rsa.pub)。這階段沒改沒關係,等等還會在詢問。-P:提供舊密碼,空表示不需要密碼(-P ‘’)-N:提供新密碼,空表示不需要密碼(-N ‘’)-b:指定金鑰長度(bits)。-C:提供一個新標籤。
接下來將出現以下內容,直接按 Enter 就會幫你把產生的金鑰放在預設的地方
- 要改位置的話,應該輸入
/custom_location/.ssh/key_name
Enter a file in which to save the key (/Users/you/.ssh/ed25519):接下來要輸入 passphrase,若不想以後 push 都要輸入的話,就點擊 Enter (留空)
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]如果顯示以下內容,表示生成成功了
Your identification has been saved in /.ssh/key_name
Your public key has been saved in /.ssh/key_name.pub
The key fingerprint is:
SHA256:
The key's randomart image is:
+--[ED25519 256]--+
| |
| |
| |
| |
| |
| |
| |
| |
| |
+----[SHA256]-----+總共會生成兩個 key,private and public key
/.ssh
├─ key_name #private key
└─ key_name.pub #public key2. 取得 public ssh key
接著我們要進到剛剛放置 key 的位置,因此我們照著以下流程,把 public 的 key 拿出(副檔名為 .pub),要特別注意 GitHub 只需要 public 的 key,private 要自己留好!千萬不要給任何人!
cat /location/.ssh/key_name.pub會顯示以下內容,要"完整"複製起來
ssh-ed25519 ************************************** [email protected]3. GitHub 網頁新增 ssh key
直接透過 GitHub 網頁 >> 設定 >> SSH & GPG key >> "New SSH key" 新增金鑰
4. 測試連線
完成金鑰上傳後,輸入ssh -T [email protected] 驗證下這組金鑰是不是正常工作,如果一切正常,應該會看到下面的訊息
Hi XXX! You’ve successfully authenticated, but GitHub does not provide shell access.5. 添加Config (Optional)
適用於輸入ssh -T [email protected] 看到以下訊息
Permission denied (publickey).因為在連線測試的時候,使用預設的檔名,但剛剛在建立金鑰時,更改了金鑰的名稱,所以必須配置一個 config 檔,輸入 vim /location/.ssh/config 建立檔案並且在檔案中加入下列內容,其中 IdentityFile 是我們剛剛建立的金鑰:
Host github.com
HostName github.com
User you
IdentityFile ~/.ssh/key_name保存後輸入ssh -T [email protected] 重新測試連線
參考資料


Member discussion