5 min read

Git ssh 金鑰設定

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 key

2. 取得 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] 重新測試連線

參考資料

踏入 Git 的世界:使用 ssh 與 GitHub 連線 👨🏻‍💻
每次 push 都需要輸入帳號密碼,或是每次 push 都需要輸入密碼,這些都是可以透過 ssh 來解決的,接下來就讓我們一起來看看如何使用 ssh 與 GitHub 連線吧!
【Git】使用 SSH 金鑰與 GitHub 連線
好久沒發網誌,一發網誌立刻收到 GitHub 的通知,說它們即將在明年廢除 https 上 code 的方式,也就是輸入帳密的方式。只好鼻子摸摸來改成使用 SSH 金鑰了。