在 Windows 命令提示字元(CMD)或 PowerShell 當中,如果想要檢查自己的 SSH 金鑰(SSH Key)到底綁定了哪一個 GitHub 帳號,可以使用一條簡單的測試指令來確認

因為你在指令中使用了環境變數,在不同的視窗環境下,寫法會稍微有一點點不同。

如果你使用的是 PowerShell 視窗,請輸入以下指令:

ssh -T -i “$env:USERPROFILE.ssh\your-key_ed25519” [email protected]

如果你使用的是傳統的 CMD 視窗,請輸入以下指令:

ssh -T -i “%USERPROFILE%.ssh\your-key_ed25519” [email protected]

當你按下 Enter 鍵執行之後,系統會連線到 GitHub 並回傳訊息,請根據畫面上顯示的文字來判斷結果:

如果畫面顯示 Hi 小帳的名字! 開頭的文字,代表這把金鑰已經正確設定在 小帳底下了。

如果畫面顯示 Hi max32002! 開頭的文字,代表這把金鑰目前被綁定到了錯誤的帳號。

目前系統檢查出來的結果依然顯示為 max32002 ,這代表你還需要去登入小帳的 GitHub 帳號,並將這把金鑰重新新增進去,才能正常使用。


實際執行上面句子, 會遇到錯誤因為

在 CMD 環境中,系統無法辨識以 $ 開頭的變數符號,因為那是 PowerShell 的專屬語法。如果在 CMD 裡使用,系統會找不到路徑。

請改用以下適合 CMD 的指令:

DOS

ssh -T -i "%USERPROFILE%\.ssh\your-key_ed25519" [email protected]

或是直接填入完整的絕對路徑:

DOS

ssh -T -i "C:\Users\max32\.ssh\your-key_ed25519" [email protected]

File: C:\Users\max32\.ssh\config

# Default GitHub account: max32002
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes

# GitHub account: max2little (use host alias: github-max2little)
Host github-max2little
    HostName github.com
    User git
    IdentityFile ~/.ssh/max2little_ed25519
    IdentitiesOnly yes

設定已經全部完成!以下是設定內容的摘要:

帳號SSH 主機名稱金鑰名稱
max32002 (預設, 大帳)[email protected]id_rsa
max2little (小帳)git@github-max2littlemax2little_ed25519

使用方法:未來在複製或設定 max2little 帳號的遠端儲存庫時,請將原本的 github.com 替換為 github-max2little。

範例指令如下:

Bash

git clone git@github-max2little:your-repo-name.git

預防帳號切換錯誤方法

[email protected] (小帳) 這個 email 被登記在 GitHub 的 max-little-account 帳號底下,所以即使 commit 不是 max-little-account 做的,GitHub 也會把該 author 連結到那個帳號的頭像。會發生即使是使用大帳進行 commit, 但是在history 上會看到是小帳進行 commit.

修正步驟(事後參考)

# 1. 設定這個 repo 的 git 身份
git config user.email "[email protected]"
git config user.name "Max"

# 2. 重寫最近 N 個 commit 的 author
git rebase HEAD~4 --exec "git commit --amend --reset-author --no-edit"

# 3. Force push(因為 commit hash 改變了)
git push origin main --force

預防方法

在這個 repo 目錄下執行一次,之後每個新 commit 都會用個人信箱:

git config user.email “[email protected]

電腦的 global git config(~/.gitconfig)若設定的是公司信箱,建議也在每個私人 repo 單獨覆蓋,避免日後再出現同樣問題。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *