一臺設備管理多個 GitHub 賬號:從配置到切換的完整指南

一臺設備管理多個 GitHub 賬號:從配置到切換的完整指南

在日常開發中,我們經常需要在同一臺電腦上使用多個 GitHub 賬號(比如個人賬號和工作賬號)。但默認情況下,Git 會優先使用全局配置的賬號,導致推送代碼時出現權限錯誤。本文將通過分步截圖級操作指南,詳細講解如何通過 SSH 密鑰配置實現多賬號無縫切換,解決登錄和權限問題。

一、為什么需要多賬號管理?

  • 場景 1:同時維護個人項目和公司項目,需區分提交身份(避免用公司賬號提交個人代碼,或反之)

  • 場景 2:不同賬號對應不同權限(如個人賬號無公司私有倉庫訪問權限)

  • 問題表現:未配置時會出現Permission denied (publickey)或403 Forbidden錯誤,提示當前賬號無目標倉庫操作權限

二、核心原理:SSH 密鑰與賬號綁定

GitHub 通過SSH 密鑰對識別用戶身份,實現免密碼登錄和權限驗證:

  1. 密鑰對組成:每個賬號需要獨立的 SSH 密鑰對(私鑰 + 公鑰)
  • 私鑰(id_ed25519_xxx):保存在本地~/.ssh目錄,不可泄露

  • 公鑰(id_ed25519_xxx.pub):添加到對應 GitHub 賬號的 SSH 密鑰列表

  1. 匹配邏輯:推送代碼時,本地私鑰與遠程倉庫綁定的公鑰匹配則通過驗證

  2. 切換核心:通過~/.ssh/config文件建立 “主機別名 - 密鑰 - 賬號” 的映射關系

三、詳細配置步驟(含操作截圖說明)

1. 生成多個 SSH 密鑰(每個賬號一個)

步驟 1:打開終端
  • Windows:右鍵桌面→選擇 “Git Bash Here”(需提前安裝 Git)

  • Mac/Linux:打開 “終端” 應用(快捷鍵Ctrl+Alt+T)

步驟 2:執行密鑰生成命令
# 生成個人賬號密鑰(替換郵箱為個人賬號注冊郵箱)
ssh-keygen -t ed25519 -C "personal@example.com" -f ~/.ssh/id_ed25519_personal# 生成工作賬號密鑰(替換郵箱為工作賬號注冊郵箱)
ssh-keygen -t ed25519 -C "work@company.com" -f ~/.ssh/id_ed25519_work

命令參數詳解

  • ssh-keygen:生成 SSH 密鑰對的核心命令,是 OpenSSH 工具集的一部分。

  • -t ed25519:指定密鑰算法為ed25519(推薦),相比傳統的rsa算法:

    • 安全性更高:采用橢圓曲線加密,同等安全強度下密鑰長度更短(僅 256 位)
    • 性能更好:生成和驗證速度比rsa快 3-5 倍
    • 兼容性:支持 GitHub、GitLab 等主流平臺(需確保本地 OpenSSH 版本≥6.5)
  • -C “personal@example.com”:添加注釋信息,用于標識密鑰用途(建議填寫對應賬號的注冊郵箱):

    • 作用:在 GitHub 的 SSH 密鑰列表中顯示,方便區分不同設備 / 賬號的密鑰
    • 要求:可填寫任意字符串,但用郵箱能直接關聯到賬號,避免混淆
  • -f ~/.ssh/id_ed25519_personal:指定密鑰文件的保存路徑和文件名

    • /.ssh/:密鑰默認存儲目錄(代表用戶主目錄)
    • id_ed25519_personal:自定義文件名(personal標識個人賬號),避免與其他賬號密鑰沖突
    • 作用:確保每個賬號有獨立的密鑰文件,防止被默認密鑰(id_rsa)覆蓋

示例說明

  • 個人賬號命令生成的文件:

    • 私鑰:~/.ssh/id_ed25519_personal(本地私密文件,不可共享)
    • 公鑰:~/.ssh/id_ed25519_personal.pub(需上傳到個人 GitHub 賬號)
  • 工作賬號命令生成的文件:

    • 私鑰:~/.ssh/id_ed25519_work
    • 公鑰:~/.ssh/id_ed25519_work.pub(需上傳到工作 GitHub 賬號)
步驟 3:設置密鑰密碼(可選但推薦)

執行命令后會提示:Enter passphrase (empty for no passphrase):

  • 直接回車:無密碼(方便但安全性低,密鑰文件泄露即風險)

  • 輸入密碼:后續每次使用密鑰(如git push)需輸入密碼(推薦,即使密鑰泄露也能保護賬號)

確認密碼后會顯示密鑰生成成功,包含類似以下信息:

Your identification has been saved in /c/Users/用戶名/.ssh/id_ed25519_personal
Your public key has been saved in /c/Users/用戶名/.ssh/id_ed25519_personal.pub
The key fingerprint is:
SHA256:abc123... personal@example.com
The key's randomart image is:
+--[ED25519 256]--+
|      ...        |
+----[SHA256]-----+
步驟 4:驗證密鑰文件

生成后在~/.ssh目錄會看到 4 個文件:

# 查看生成的密鑰文件
ls -al ~/.ssh | grep id_ed25519_
  • 私鑰:id_ed25519_personal、id_ed25519_work(權限應為-rw-------,僅當前用戶可讀寫)

  • 公鑰:id_ed25519_personal.pub、id_ed25519_work.pub(權限應為-rw-r–r–,可公開讀取)

2. 配置 SSH config 文件(關鍵步驟)

SSH 配置文件用于建立 “主機別名 - 密鑰 - 賬號” 的映射關系,告訴 Git"訪問特定倉庫時使用哪個密鑰"。

步驟 1:創建并設置 config 文件權限
  1. 創建文件:打開文件資源管理器,定位到~/.ssh目錄(在 Windows 系統中,~通常對應用戶主目錄,例如C:\Users\你的用戶名;在 macOS 和 Linux 系統中,可通過訪達或終端的cd ~/.ssh命令進入該目錄)。在該目錄下,右鍵點擊空白處,選擇 新建 -> 文本文檔,并將文件命名為config ,注意不要添加.txt等后綴。

  2. 設置權限(僅限 macOS 和 Linux 系統):由于在圖形界面下直接設置文件權限操作較為復雜,建議打開終端,輸入以下命令為config文件設置權限:

chmod 600 ~/.ssh/config

權限錯誤會導致:Bad permissions for config file或配置不生效 。對于 Windows 系統,默認權限設置通常能滿足 SSH 要求,無需額外操作 。

步驟 2:編輯 config 文件內容

用文本編輯器打開~/.ssh/config(推薦 VS Code 或記事本),添加以下內容:

# 個人賬號配置(自定義標識)
Host github-personalHostName github.com          # 實際連接的服務器域名(固定為github.com)User git                     # Git服務默認用戶名(固定為git)IdentityFile ~/.ssh/id_ed25519_personal  # 綁定個人賬號的私鑰路徑IdentitiesOnly yes           # 強制使用指定密鑰,避免自動使用其他密鑰ServerAliveInterval 60       # 每60秒發送一次心跳包,保持連接# 工作賬號配置(自定義標識)
Host github-workHostName github.comUser gitIdentityFile ~/.ssh/id_ed25519_work  # 綁定工作賬號的私鑰路徑IdentitiesOnly yesServerAliveInterval 60

配置項說明

配置項作用能否修改
Host自定義主機別名(如 github-personal)可修改(建議見名知意)
HostName實際連接的服務器地址不可修改(固定github.com)
UserGit 服務用戶名不可修改(固定為 git)
IdentityFile私鑰文件路徑需與生成的私鑰路徑一致
IdentitiesOnly是否強制使用指定密鑰建議設為 yes
ServerAliveInterval保持連接的心跳間隔(秒)可選配置(推薦 60)

注意事項

  • 注釋必須單獨一行(以#開頭),禁止在行末添加注釋(會導致解析錯誤)

    • 錯誤示例:HostName github.com # 這是注釋(會報錯garbage at end of line)
  • 路徑中的~代表用戶主目錄:

    • Windows:C:\Users\你的用戶名(如C:\Users\zhangsan)
    • Mac/Linux:/Users/你的用戶名(如/Users/zhangsan)
  • 這段SSH配置文件定義了兩個GitHub主機別名:

    • github-personal:使用默認RSA密鑰(~/.ssh/id_ed25519_personal)連接github.com
    • github-work:使用ED25519密鑰(~/.ssh/id_ed25519_work連接github.com

    兩個配置都指定用戶為git,且只使用指定的身份文件進行認證。這樣可以方便地在兩個不同的GitHub賬號間切換使用。

3. 將公鑰添加到對應 GitHub 賬號

公鑰是 GitHub 識別本地設備的 “身份證”,需將每個賬號的公鑰添加到對應 GitHub 賬號中。

步驟 1:復制公鑰內容
  1. Windows 用戶
    • 打開 “文件資源管理器”,導航到C:\Users\你的用戶名.ssh目錄(若找不到.ssh文件夾,可在資源管理器中勾選 “顯示隱藏文件”)。
    • 找到對應的公鑰文件(如id_ed25519_personal.pub或id_ed25519_work.pub),右鍵點擊文件,選擇 “打開方式”,用記事本打開。
    • 全選(快捷鍵Ctrl+A)記事本中的內容,然后右鍵選擇 “復制”(快捷鍵Ctrl+C)。
  1. Mac 用戶
    • 打開 “訪達”,點擊菜單欄的 “前往”,按住Option鍵,選擇 “資源庫”,進入ssh文件夾。
    • 雙擊打開公鑰文件(如id_ed25519_personal.pub),會使用文本編輯打開。
    • 使用快捷鍵Command+A全選內容,再按Command+C復制。
  1. Linux 用戶
    • 打開文件管理器,找到并打開~/.ssh目錄(如果目錄不可見,需設置顯示隱藏文件)。
    • 右鍵點擊公鑰文件(如id_ed25519_personal.pub),選擇 “使用文本編輯器打開”。
    • 按下Ctrl+A全選內容,然后按下Ctrl+C復制。
步驟 2:添加公鑰到 GitHub 賬號
  1. 登錄目標 GitHub 賬號(先操作個人賬號,再切換工作賬號)

  2. 點擊右上角頭像→Settings→左側菜單SSH and GPG keys→New SSH key

  3. 填寫信息:

    • Title:自定義標識(如 “個人筆記本 - 2024”,便于區分設備)
    • Key:粘貼步驟 1 復制的公鑰內容(以ssh-ed25519開頭)
  1. 點擊Add SSH key完成添加(可能需要輸入 GitHub 密碼驗證)

驗證添加成功:在SSH and GPG keys頁面能看到剛添加的公鑰(狀態為 “Active”)

4. 測試 SSH 連接(驗證配置)

通過ssh -T命令測試賬號是否綁定成功:

# 測試個人賬號連接
ssh -T git@github-personal# 測試工作賬號連接
ssh -T git@github-work

成功標志:輸出Hi 你的用戶名! You’ve successfully authenticated, but GitHub does not provide shell access.

  • 其中 “你的用戶名” 需與當前登錄的 GitHub 賬號一致

常見失敗情況及解決

錯誤信息原因分析解決方法
Permission denied (publickey)公鑰未添加或密鑰路徑錯誤重新添加公鑰或檢查 IdentityFile 路徑
Could not resolve hostname主機別名拼寫錯誤檢查 config 文件中 Host 字段拼寫
Bad owner or permissions on configconfig 文件權限不是 600重新執行chmod 600 ~/.ssh/config
Host key verification failedknown_hosts 文件中記錄的主機密鑰不匹配刪除~/.ssh/known_hosts中對應行后重試

三、如何切換賬號操作倉庫?

1. 克隆新倉庫(按賬號區分)

克隆時使用 “主機別名” 代替github.com,自動關聯對應賬號:

# 克隆個人賬號的倉庫(替換為實際賬號和倉庫名)
git clone git@github-personal:personal-username/my-project.git
git clone git@github-personal:personal-username/my-project.git
# 克隆工作賬號的倉庫(替換為實際賬號和倉庫名)
git clone git@github-work:work-username/company-project.git
  • 示例:克隆個人賬號alice的blog倉庫:git clone git@github-personal:alice/blog.git

2. 已有倉庫切換賬號(修改遠程 URL)

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

如果倉庫已克隆到本地,需修改遠程 URL 以切換賬號:

步驟 1:查看當前遠程配置
# 進入倉庫目錄
cd 你的倉庫路徑# 查看當前遠程URL(origin為默認遠程倉庫名)
git remote -v
  • 輸出示例(舊 URL,使用默認賬號):
origin  git@github.com:old-username/old-repo.git (fetch)
origin  git@github.com:old-username/old-repo.git (push)
步驟 2:修改遠程 URL 為目標賬號
# 切換到個人賬號(替換為實際賬號和倉庫名)
git remote set-url origin git@github-personal:personal-username/my-project.git# 切換到工作賬號(替換為實際賬號和倉庫名)
git remote set-url origin git@github-work:work-username/company-project.git
步驟 3:驗證修改結果
git remote -v
  • 成功標志:URL 中的github.com已替換為對應的主機別名(如github-personal)

3.

配置提交用戶名 / 郵箱(可選)

默認情況下,Git 提交會使用全局配置的用戶名 / 郵箱。如需按倉庫區分(讓 GitHub 顯示正確的提交者),可在倉庫內設置局部配置:

# 進入倉庫目錄,設置局部用戶名(僅當前倉庫生效)
git config user.name "個人賬號名"
git config user.email "personal@example.com"# 工作倉庫設置
git config user.name "工作賬號名"
git config user.email "work@example.com"

若希望設置全局生效的用戶名和郵箱,可使用以下命令:

git config --global user.name "全局賬號名"
git config --global user.email "global@example.com"
  • 查看配置:git config --list(倉庫級配置會覆蓋全局配置)

四、常見問題及深度解決方案

1. 推送時提示無權限(Permission denied)

排查步驟:
  1. 確認遠程 URL 使用了正確的主機別名(如github-work而非github.com)

  2. 執行ssh -T git@主機別名驗證賬號綁定是否成功

  3. 檢查目標倉庫的訪問權限(登錄 GitHub 查看倉庫Settings→Manage access)

解決方案:
  • 若權限不足:聯系倉庫管理員添加當前賬號為協作者(需提供正確的 GitHub 用戶名)

  • 若綁定錯誤:重新檢查公鑰添加是否正確(公鑰內容需完整,無多余空格)

2. 重啟電腦后密鑰失效(需重新執行 ssh-add)

原因:SSH 代理默認不會自動加載非默認名稱的密鑰(如id_ed25519_personal)

解決方案(設置開機自動加載密鑰):
  1. 創建密鑰加載腳本~/.ssh/auto-load-keys.sh:
#!/bin/sh
# 啟動SSH代理
eval "$(ssh-agent -s)"
# 加載個人賬號密鑰
ssh-add ~/.ssh/id_ed25519_personal
# 加載工作賬號密鑰
ssh-add ~/.ssh/id_ed25519_work
  1. 設置腳本權限并添加到啟動項:
# 設置可執行權限
chmod +x ~/.ssh/auto-load-keys.sh# 添加到bash啟動腳本(Windows Git Bash或Linux)
echo "source ~/.ssh/auto-load-keys.sh" >> ~/.bashrc# Mac用戶添加到zsh啟動腳本(若使用zsh)
echo "source ~/.ssh/auto-load-keys.sh" >> ~/.zshrc

3. 多賬號提交記錄顯示錯誤用戶名

原因:未設置倉庫級的user.name和user.email,使用了全局配置

解決方案:
# 進入倉庫目錄,設置正確的提交者信息
git config user.name "正確的用戶名"
git config user.email "正確的郵箱"# 若需修改歷史提交記錄(謹慎操作,已推送的記錄不建議修改

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/923667.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/923667.shtml
英文地址,請注明出處:http://en.pswp.cn/news/923667.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

即插即用,秒入虛擬:TouchDIVER Pro 觸覺手套 賦能 AR/VR 高效交互

一、即插即用,零門檻開啟沉浸之旅 在XR(擴展現實)技術高速發展的今天,用戶對“真實感”的追求愈發迫切。Weart公司旗下旗艦產品TouchDIVER Pro觸覺手套,憑借無需適配器、無需復雜設置的極簡設計,打破傳統觸…

GitHub熱榜項目 - 日榜之應用場景與未來發展趨勢

一、引言GitHub熱榜項目 - 日榜呈現出豐富多樣的技術成果,這些項目蘊含著巨大的應用潛力,并且對未來數智化技術的發展有著重要的指示作用。深入探究其應用場景以及未來發展趨勢,能讓我們更好地把握技術發展方向,將這些前沿技術應用…

Linux網絡:socket編程TCP

文章目錄前言一,服務器端流程1-1 綁定協議1-2 綁定IP和端口1-3 監聽客戶端1-4 接收連接1-5 收發數據1-6 關閉連接1-7 服務端整體代碼二,客戶端流程2-1 指定地址和端口2-2 連接服務器2-3 發送消息2-4 客戶端整體代碼前言 TCP 的通信過程就像兩個人打電話…

飛書智能查詢機器人搭建說明文檔

飛書智能查詢機器人搭建說明文檔 一、使用手冊 1. 創建飛書機器人應用 如果僅需對接已有機器人應用則可跳過該步驟(建議各業務部門獨立使用各自的機器人應用)。在飛書開發者后臺中創建企業自建應用,添加機器人應用能力并申請對應的身份權限…

藍色系列包裝行業網站 適合企業站,帶手機版自適應

內容目錄一、詳細介紹二、效果展示1.部分代碼2.效果圖展示三、學習資料下載一、詳細介紹 藍色通用企業網站是基于SDCMS四合一企業網站管理系統開發的模板,適合企業站,帶手機版。 四網合一企業網站管理系統是一個以PHPMySQL/Sqlite進行開發的四網合一網…

【大模型:知識圖譜】--6.Neo4j DeskTop安裝+使用

上一期講了圖知識庫的安裝, 【圖數據庫】--Neo4j 安裝_neo4j安裝-CSDN博客 現在來看看可視化管理程序:Neo4j DeskTop的安裝. 需要先安裝java環境,具體看上面 目錄 1.Neo4j DeskTop版下載 2.Neo4j DeskTop版安裝 3.Neo4j DeskTop版使用 …

Python爬蟲實戰——使用NetNut網頁解鎖器獲取亞馬遜電商數據

文章目錄一、電商數據的作用1.1 支撐科學決策,降低試錯成本1.2 提升運營效率,實現降本增效1.3 深化用戶理解,驅動個性化服務1.4 監測競品動態,制定差異化策略1.5 驅動產品創新,滿足用戶需求二、爬取目標三、環境準備四…

超越NAT:如何構建高效、安全的內網穿透隧道

在敏捷開發和分布式協作成為主流的今天,開發者需要一個能夠將本地開發環境瞬間暴露給公網的能力,以便進行演示、聯調或處理回調。傳統方案如配置路由器端口映射或部署VPN,不僅繁瑣且存在安全風險。內網穿透技術,特別是以 ngrok、Z…

第二十三章 ESP32S3 RTC 實驗

本章介紹 ESP32-S3 實時時鐘(RTC)的使用,實時時鐘能為系統提供一個準確的時間,即時系統復位或主電源斷電, RTC 依然能夠運行,因此 RTC 也經常用于各種低功耗場景。通過本章的學習,將學習到 RTC …

Java 輕松實現 Markdown 轉 Word、PDF、HTML

在軟件開發和技術寫作領域,Markdown 已成為一種被廣泛使用的輕量級標記語言。它的語法簡潔,書寫效率高,非常適合快速記錄筆記、撰寫技術文檔或博客文章。但在實際應用中,Markdown 文件往往需要被轉換為更通用的格式,例…

Kafka系列之:Kafka broker does not support the ‘MetadataRequest_v0‘ Kafka protocol.

Kafka系列之:Kafka broker does not support the MetadataRequest_v0 Kafka protocol. 一、完整報錯 二、錯誤原因 三、解決方法 一、完整報錯 kafka.errors.IncompatibleBrokerVersion: IncompatibleBrokerVersion: Kafka broker does not support the ‘MetadataRequest_v0’…

開源AI紅隊工具“Red AI Range“助力發現、分析與緩解AI系統漏洞

開源AI紅隊平臺Red AI Range(RAR)正在改變安全專業人員評估和強化AI系統的方式。該平臺通過模擬真實攻擊場景,利用容器化架構和自動化工具,簡化了AI特有漏洞的發現、分析和緩解流程。**核心功能** 1. 武器庫/目標按鈕可快速啟動…

SQL 數據庫簡介

SQL(Structured Query Language)是一種用于管理和操作關系型數據庫的標準語言。關系型數據庫以表格形式存儲數據,并通過行和列的結構化方式組織信息。SQL 提供了一套強大的命令,用于查詢、插入、更新和刪除數據,以及管…

SpringBoot4與Spring7發布:云原生深度進化

Spring Boot 4和Spring Framework 7帶來基礎要求升級、模塊化改進、API版本化、聲明式HTTP客戶端、彈性注解等重大特性,標志著Java開發生態向云原生時代的深度進化。 近日,Spring生態迎來了自2022年以來最具里程碑意義的更新——Spring Boot 4和Spring …

基于Spring Boot與Micrometer的系統參數監控指南

如何為你的Spring Boot應用裝上一個功能強大的監控儀表盤在現代微服務架構中,系統監控已成為保障應用穩定性的關鍵環節。通過有效的監控,我們可以實時了解應用的運行狀態,及時發現并解決性能問題。本文將介紹如何使用Micrometer及其注冊表&am…

【運維】-- 前端會話回放與產品分析平臺之 openreplay

目錄 OpenReplay 項目分析 1、項目概覽 2、關鍵特性 3、代碼結構(Monorepo) 4、技術棧與語言占比 5、部署與交付 6、社區與支持 7、版本與活躍度(截至倉庫頁面所示) 8、適用場景 9、優勢與注意事項 10、落地建議&#…

NineData社區版 V4.5.0 正式發布!運維中心新增細粒度任務權限管理,新增MySQL至Greenplum全鏈路復制對比

NineData 社區版 V4.5.0 正式發布!在數據復制方面,新增 MySQL 至 Greenplum 全鏈路復制對比,并優化全局 DDL 管控、MySQL/PostgreSQL/MongoDB 同構性能。在數據庫 DevOps 方面,新增支持 AWS RDS 全系列及阿里云 PolarDB&#xff0…

discuz所有下載版本和升級工具

下載版本: Discuz! 每日構建版下載 - DiscuzX 3.x Daily Build Download Site SC是簡體中文 TC是繁體中文 可能你需要其他版本: Discuz!官方網站 - 開放、連接、共贏 下載簡體中文就好。 升級工具: 升級程序下載地址 https://gitee.com/oldhuhu/DiscuzX34235.git(…

【開題答辯全過程】以 “紅色棗莊”旅游網站為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人,語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

【LeetCode】2785. 將字符串中的元音字母排序

題目描述 題目鏈接 問題分析 這道體的思路非常簡單和好理解,找出字符串中的元音字符,然后按照ASSIC值進行排序,然后插入回對應的位置,解題步驟為: 使用一個set(可以快速查找的容器)&#x…