跳转至

GitHub、TortoiseGit SSH 設置

介紹

```bash showLineNumbers 作業環境:Windows + WSL 服務管理: 主要應用:Git Bash + TortoiseGit 功能重點: a. 改用 SSH URL 拉專案 b. 本地生成新的 SSH Key 並加到 GitHub c. 多個專案管理時透過 SSH Key配置文件 ~/.ssh/config 為不同的 GitHub 專案或帳號設定不同的 SSH 金鑰 d. TortoiseGit SSH 設置

## 單個專案可適用

### 1. 產生新的 SSH Key

建議用比較新的 ed25519 演算法:
```bash
ssh-keygen -t ed25519 -C "your_email@example.com"

-C 後面放你的 GitHub email(方便辨識,不影響功能)

會問你要存哪裡,直接 Enter 就放在 ~/.ssh/id_ed25519

2. 啟動 ssh-agent 並加 key

use git bash

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

3. 把 Public Key 加到 GitHub

印出你的 public key:

cat ~/.ssh/id_ed25519.pub

複製整串(從 ssh-ed25519 開頭到最後 email 結尾)。

到 GitHub → Settings → SSH and GPG keys → New SSH key → 貼上。

4. 測試連線

ssh -T git@github.com

第一次會問你是否信任 GitHub,輸入 yes。 正常會看到:

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

5. 改用 SSH URL 拉專案

下次 clone/pull/push 用 SSH 格式:

git clone git@github.com:oldfesixsixsix/meta-key-vault.git

多個專案 key 管理

1. 產生新的 SSH Key

ssh-keygen -t ed25519 -C "cry_email@example.com" -f C:\Users\e368-\.ssh\id_ed25519_user1

系統會問你儲存路徑,建議改名字避免覆蓋原本 如果要加密,可以設定 passphrase,否則直接 Enter 跳過。

2. 將 SSH Key 加入 ssh-agent

啟動 agent 並加入 key: 用git bash

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_user1

3. 把公鑰加入 GitHub

cat ~/.ssh/id_ed25519_user1.pub
ssh -T git@github.com 

用 ssh -T git@github.com 測試成功的話,這證明了你的 SSH 金鑰在系統層面是有效的,並且能夠正確地與 GitHub 伺服器進行身份驗證。

4. ssh -T git@github.com 測試時候 GitHub 帳號顯示另個帳號怎麼辦?

當顯示的帳號不是你當前設置的,而是另一個使用者(Hi user2)。 要解決這個問題,你需要明確告訴 SSH 客戶端,針對這個專案要使用哪把金鑰。 在 ~/.ssh/config 中設定 SSH 專案別名 (推薦) 這是最專業也最乾淨的解決方案。它允許你為不同的 GitHub 專案或帳號設定不同的 SSH 金鑰。 用記事本或其他編輯器打開 config 檔案,並新增以下內容:

```Ini, TOML Host github.com-user1 HostName github.com User git IdentityFile C:\Users\username.ssh\id_ed25519_user1

Host github.com-user2 HostName github.com User git IdentityFile C:\Users\username.ssh\id_ed25519_user2

Host:這是你為這個 SSH 設定建立的別名。
IdentityFile:這是指向你私鑰的完整路徑。請將 你的使用者名稱 替換成你的實際帳號名稱。
更新你的 Git 遠端 URL:
回到你的專案資料夾,打開 TortoiseGit Settings。在 Git -> Remote 頁面,將你的遠端 URL 更改為:

```bash
git@sshConfigHost:yourGitHubAccount/yourRepositories.git

# 比方說我要 SSH 這個專案
git@github.com:userabc/meta-key-vault.git

# 我已經在 userabc 的 GitHub SSH And GPG keys 放了 id_ed25519_user2.pub
# 就需要去找到 config 中的 id_ed25519_user2 的 Host
git@github.com-user2:userabc/meta-key-vault.git

5. GitHub Settings > SSH And GPG keys > Key is already in use

錯誤訊息 Key is already in use 意味著你正嘗試加入的 SSH 公鑰,已經被綁定到另一個 GitHub 帳號了。

GitHub 對於 SSH 金鑰的規則是:一把公鑰只能被一個 GitHub 帳號使用。

TortoiseGit 中 PuTTY 與 OpenSSH 的差異

Setting > Network > SSH Client

C:\Windows\System32\OpenSSH\ssh.exe
C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe

1. PuTTY 客戶端 (TortoiseGitPlink.exe):

當你選擇這個客戶端時,你必須在 Git > Remote > origin 的頁面中, 將 .ppk 格式的私鑰放在 PuTTY Key 欄位。PuTTY 的工具只認這種專屬的 .ppk 格式。

2. OpenSSH 客戶端 (C:\Windows\System32\OpenSSH\ssh.exe):

當你選擇這個客戶端時,你不需要在任何欄位中指定金鑰。 OpenSSH 有自己的一套金鑰管理規則, 它會自動到你的 Windows 使用者目錄下的 .ssh 資料夾去尋找私鑰。 你無法在 TortoiseGit 的設定中指定,也找不到這個選項。

3. SSH 的權限問題

權限問題跟磁碟槽無關 SSH 的權限問題通常來自兩個地方:

  1. SSH 金鑰的設定:TortoiseGit 沒有找到正確的金鑰,或無法使用它。
  2. Git 儲存庫的權限:您的 GitHub 帳號對於該儲存庫沒有讀取(pull)或寫入(push)的權限。