一台电脑多个 github 怎么使用 ssh-key 认证

生成两个不同的 SSH 密钥

首先,我们需要为两个账号分别生成一套密钥对。切记不要一律回车使用默认文件名(id_ed25519),否则后生成的会覆盖掉先生成的。

打开 Git Bash,依次运行以下命令:

  1. 生成个人账号的密钥
ssh-keygen -t ed25519 -C "your_personal_email@example.com" -f ~/.ssh/id_ed25519_personal

2. 生成工作账号的密钥

ssh-keygen -t ed25519 -C "your_work_email@example.com" -f ~/.ssh/id_ed25519_work

提示:运行后会提示输入密码(passphrase),可以直接连续按回车跳过。现在你的 ~/.ssh/ 目录下应该有 4 个文件:两个公钥(.pub)和两个私钥。

将公钥添加到对应的 GitHub 账号

登录你的个人 GitHub 账号,进入 Settings -> SSH and GPG keys -> New SSH key

在 Git Bash 中运行以下命令,复制个人公钥的内容,贴到 GitHub 中:

cat ~/.ssh/id_ed25519_personal.pub

退出个人账号,登录你的工作 GitHub 账号,同样进入 SSH and GPG keys

在 Git Bash 中运行以下命令,复制工作公钥的内容并添加:

cat ~/.ssh/id_ed25519_work.pub

创建并配置 SSH config 文件

这一步是核心。我们需要告诉 SSH,当遇到不同的托管地址时,该掏出哪把钥匙。

  1. ~/.ssh/ 目录下创建一个名为 config 的文件(注意没有后缀名):
touch ~/.ssh/config

2. 使用记事本或编辑器打开它(也可以在 Git Bash 中运行 notepad ~/.ssh/config),将以下内容复制进去并保存:

# 账号一:张三丰(使用自定义别名,走443端口)
Host github-zhang-shanfeng
    HostName ssh.github.com
    Port 443
    User git
    IdentityFile ~/.ssh/id_ed25519_zhang_shanfeng

# 账号二:小土坡(使用自定义别名,走443端口)
Host github-xiaotupo-com
    HostName ssh.github.com
    Port 443
    User git
    IdentityFile ~/.ssh/id_ed25519

# 默认配置:为了让你平时不加别名直接使用 github.com 时,也能正常走443端口(默认指向小土坡账号)
Host github.com
    HostName ssh.github.com
    Port 443
    User git
    IdentityFile ~/.ssh/id_ed25519

💡 核心逻辑解析:

  • Host:这是你自定义的“别名”。个人账号我们保留了原生的 github.com;工作账号我们改成了 github-work
  • HostName:真实的服务器地址,统一都是 github.com
  • IdentityFile:该别名对应的私钥绝对路径。

测试连接

配置完成后,我们在 Git Bash 中验证一下 SSH 是否能正确识别这两个账号:

# 测试个人账号
ssh -T git@github.com

# 测试工作账号
ssh -T git@github-work

在日常中如何使用?

既然配置了别名,你在克隆(Clone)和推送(Push)工作仓库时,就需要做一点小小的改变。

1. 克隆个人仓库(保持原样)

因为别名就是 github.com,你可以直接复制 GitHub 上的 SSH 地址:

git clone git@github.com:personal_username/repo-name.git

2. 克隆工作仓库(需要修改域名)

如果工作仓库的官方 SSH 地址是 git@github.com:work_username/project.git,你需要把其中的 github.com 替换为你的别名 github-work

git clone git@github-work:work_username/project.git

⚠️ 别忘了配置局部用户名和邮箱!

为了防止用工作账号提交代码时,注释里显示的却是你的个人邮箱,进到各自的仓库目录后,记得单独设置本地的 user.nameuser.email

# 进入工作仓库
cd /path/to/work/project

# 设置仅在当前仓库生效的局部配置(不加 --global)
git config user.name "Your Work Name"
git config user.email "your_work_email@example.com"

怎么 Push

从零开始的新项目(还没关联 GitHub)

如果你在本地新建了一个文件夹,写了代码,现在想推送到 张三丰 的账号:

  1. 初始化并提交本地代码:
git init
git add .
git commit -m "first commit"

    2. 关联远程仓库(关键点:使用别名):

    官方给你的地址通常是 git@github.com:zhang-shanfeng/repo.git,你需要把 github.com 改成你的别名 github-zhang-shanfeng

    git remote add origin git@github-zhang-shanfeng:zhang-shanfeng/repo.git

    3. 正常推送:

    git push -u origin main

    (之后再推送,直接敲 git push 即可)

    现有的项目(想切换成张三丰的账号推送)

    如果这个项目你之前就已经在开发了,或者你是直接用官方默认地址 clone 下来的,你需要修改它的远程连接地址。

    把地址修改为带有别名的地址 :

    git remote set-url origin git@github-zhang-shanfeng:zhang-shanfeng/repo.git

    正常推送:

    git push origin main

    直接用别名 Clone 下来的项目

    如果你在一开始下载项目时,就已经使用了别名:

    git clone git@github-zhang-shanfeng:zhang-shanfeng/repo.git

    那么 Git 已经默默把别名记在小本本(该项目的 .git/config)里了。你什么都不用改,后续直接:

    git push origin main

    检查你的提交签名(非常重要)

    虽然你通过别名把代码成功推到了张三丰的账号上,但如果你的本地邮箱没改,GitHub 上的提交历史(Contribution Graph)里显示的头像和名字可能还是小土坡的

    每次为新仓库配置完别名后,一定记得进到该仓库的目录下,单独修正该仓库的用户名和邮箱

    # 只修改当前仓库的配置(不要加 --global)
    git config user.name "张三丰" 
    git config user.email "zhangshanfeng@example.com"

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注

    Index