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
3. 把 Public Key 加到 GitHub
印出你的 public key:
複製整串(從 ssh-ed25519 開頭到最後 email 結尾)。
到 GitHub → Settings → SSH and GPG keys → New SSH key → 貼上。
4. 測試連線
第一次會問你是否信任 GitHub,輸入 yes。 正常會看到:
5. 改用 SSH URL 拉專案
下次 clone/pull/push 用 SSH 格式:
多個專案 key 管理
1. 產生新的 SSH Key
系統會問你儲存路徑,建議改名字避免覆蓋原本 如果要加密,可以設定 passphrase,否則直接 Enter 跳過。
2. 將 SSH Key 加入 ssh-agent
啟動 agent 並加入 key: 用git bash
3. 把公鑰加入 GitHub
用 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
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 的權限問題通常來自兩個地方:
- SSH 金鑰的設定:TortoiseGit 沒有找到正確的金鑰,或無法使用它。
- Git 儲存庫的權限:您的 GitHub 帳號對於該儲存庫沒有讀取(pull)或寫入(push)的權限。