為什麼需要 SSH Key?
使用 SSH 協定連接 GitHub,無需每次 push/pull 時輸入帳號密碼。設定一次,永久使用。
Step 1:檢查是否已有 SSH Key
PowerShell
# 列出已有的 SSH 金鑰
ls ~/.ssh
如果看到
id_ed25519.pub 或 id_rsa.pub,表示已有金鑰,可直接跳到 Step 3。
Step 2:生成新的 SSH Key
PowerShell
# 使用 Ed25519 演算法(推薦,更安全更快)
ssh-keygen -t ed25519 -C "your@email.com"
# 或使用 RSA 4096(相容性更好)
ssh-keygen -t rsa -b 4096 -C "your@email.com"
執行後會提示儲存位置,直接按 Enter 使用預設路徑 ~/.ssh/id_ed25519
提示設定密碼(passphrase),可直接按 Enter 留空(方便但安全性稍低),或輸入密碼
再次輸入密碼確認(或再按 Enter)
金鑰生成完成!私鑰
id_ed25519(不可外洩),公鑰 id_ed25519.pub(要上傳到 GitHub)。
Step 3:啟動 ssh-agent 並加入金鑰
PowerShell
# 啟動 ssh-agent
Start-Service ssh-agent
Set-Service -Name ssh-agent -StartupType Automatic
# 將私鑰加入 ssh-agent
ssh-add ~/.ssh/id_ed25519
設定 ssh-agent 自動啟動需要管理員權限。若無權限,每次重啟電腦後需手動執行
Start-Service ssh-agent。
Step 4:複製公鑰內容
PowerShell
# 顯示公鑰並複製到剪貼簿
Get-Content ~/.ssh/id_ed25519.pub | Set-Clipboard
# 或直接輸出查看
cat ~/.ssh/id_ed25519.pub
公鑰格式為
ssh-ed25519 AAAA...xxx your@email.com,整行都要複製。
Step 5:將公鑰加入 GitHub
前往 GitHub → 點擊右上角頭像 → Settings
左側選單點擊 SSH and GPG keys
點擊 New SSH key 按鈕
Title:輸入識別名稱(如 Windows-Desktop)
Key:貼上剛才複製的公鑰內容
點擊 Add SSH key
Step 6:測試連線
PowerShell
ssh -T git@github.com
成功時會顯示:
Hi username! You've successfully authenticated...
首次連線會提示
Are you sure you want to continue connecting?,輸入 yes 即可。
常見問題排除
Permission denied (publickey)
# 1. 確認公鑰已正確上傳到 GitHub
# 2. 測試用詳細模式查看錯誤
ssh -vT git@github.com
# 3. 確認 ssh-agent 正在執行且有載入金鑰
ssh-add -l
# 4. 如果沒有載入,手動加入
ssh-add ~/.ssh/id_ed25519
切換 remote 從 HTTPS 改為 SSH
# 查看當前 remote URL
git remote -v
# 從 HTTPS 改為 SSH
git remote set-url origin git@github.com:username/repo.git
Windows OpenSSH 未啟用
# 檢查 OpenSSH 用戶端狀態
Get-WindowsCapability -Online | Where-Object Name -like '*SSH*'
# 安裝 OpenSSH 用戶端(需管理員)
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
進階:管理多個 SSH Key
如果有多個 GitHub 帳號,或同時使用 GitHub 和 GitLab,需設定
~/.ssh/config。
~/.ssh/config
# GitHub 帳號 1(預設)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
# GitHub 帳號 2
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
使用方式
# 帳號 1(預設)
git clone git@github.com:user1/repo.git
# 帳號 2
git clone git@github-work:user2/repo.git