如何在一台电脑上设置多个用于不同git平台的公钥
Published in:2026-03-07 |

如何在一台电脑上设置多个用于不同git平台的公钥

一、背景

当我在自己的本地电脑给github设置完公钥后,再想在gitlab上推送/拉取代码时,发现:

img

所以我希望能够在一台mac上同时拥有两个平台的密钥,推送/拉取代码时能够分别在不同平台上操作

二、步骤

核心原理:Mac的SSH客户端支持通过 *~/.ssh/config* 配置文件,*为不同的git服务器(eg:github.com/gitlab.com)绑定专属的密钥文件*,当你访问对应服务器时,SSH 会自动选择匹配的密钥,无需每次手动指定。

步骤 1:为 GitHub 和 GitLab 分别生成独立密钥

先为两个平台生成****命名不同的密钥对****(避免覆盖默认密钥),打开 Mac 的「终端」(Terminal)执行:

1. 生成 GitHub 专用密钥

1
2
# 替换为你的GitHub注册邮箱,密钥文件命名为id_ed25519_github
ssh-keygen -t ed25519 -C "你的GitHub邮箱@example.com" -f ~/.ssh/id_ed25519_github

2. 生成 GitLab 专用密钥

1
2
# 替换为你的GitLab注册邮箱,密钥文件命名为id_ed25519_gitlab
ssh-keygen -t ed25519 -C "你的GitLab邮箱@example.com" -f ~/.ssh/id_ed25519_gitlab

执行每个命令后会出现提示:

Enter passphrase (empty for no passphrase): → 可选:设置密钥密码(更安全,每次用 SSH 时需输入),也可直接回车跳过;

Enter same passphrase again: → 若设了密码则重复输入,否则回车。

img

生成完成后,~/.ssh目录下会出现 4 个文件:

id_ed25519_github(GitHub 私钥)、id_ed25519_github.pub(GitHub 公钥);

id_ed25519_gitlab(GitLab 私钥)、id_ed25519_gitlab.pub(GitLab 公钥)。

img

步骤 2:创建 / 编辑 SSH Config 文件(核心:自动匹配密钥)

这是实现 “不同平台用不同密钥” 的关键,Mac 的 SSH 会通过这个配置文件识别服务器并选择对应密钥。

1. 打开 Config 文件(没有则创建)

1
2
# 用文本编辑器打开~/.ssh/config,不存在则自动创建
open ~/.ssh/config

2. 粘贴以下配置内容(直接复制,替换注释里的路径)

1
2
3
4
5
6
7
8
9
10
11
12
13
# GitHub 配置
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github # 指向GitHub专用私钥
IdentitiesOnly yes # 强制使用指定的密钥,不尝试其他密钥

# GitLab 配置
Host gitlab.com
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519_gitlab # 指向GitLab专用私钥
IdentitiesOnly yes

3. 设置 Config 文件的正确权限(Mac 安全要求)

SSH 对配置文件权限要求严格,执行以下命令确保权限正确(否则会失效):

1
2
3
chmod 600 ~/.ssh/config  # Config文件权限设为600(仅自己可读可写)
chmod 400 ~/.ssh/id_ed25519_github # 私钥权限设为400(仅自己可读)
chmod 400 ~/.ssh/id_ed25519_gitlab

步骤 3:将对应公钥上传到 GitHub/GitLab

分别复制 GitHub 和 GitLab 的公钥内容,上传到对应平台的 SSH 设置里。

1. 复制 GitHub 公钥(Mac 一键复制)

1
cat < ~/.ssh/id_ed25519_github.pub

登录 GitHub → 右上角头像 → Settings → SSH and GPG keys → New SSH key;

Title:填备注(如 “Mac - GitHub”);

Key:粘贴复制的公钥内容 → 点击Add SSH key。

2. 复制 GitLab 公钥(Mac 一键复制)

1
cat < ~/.ssh/id_ed25519_gitlab.pub

登录 GitLab → 右上角头像 → Preferences → SSH Keys;

Title:填备注(如 “Mac - GitLab”);

Key:粘贴复制的公钥内容 → 点击Add key。

步骤 4:测试 SSH 连接(验证配置是否生效)

分别测试 GitHub 和 GitLab 的 SSH 连接,确认密钥匹配成功。

1
2
3
4
5
# 测试 GitHub 连接
ssh -T git@github.com

# 测试 GitLab 连接
ssh -T git@gitlab.com

若输出 Hi 你的GitHub/GitLab用户名! You’ve successfully authenticated…,说明 GitHub/GitLab 密钥配置成功。

三、Q & A

Q:有的同学可能会遇到这个问题:github连接成功了,但是好像gitlab连接失败了,更“诡异”的是gitlab/github都可以正常pull/push等操作

A:

ssh -T 测试的是「全局 GitLab 服务器的用户级认证」,而 push/pull 正常说明「针对具体仓库的权限认证是有效的」—— 两者的认证逻辑、依赖的密钥 / 权限范围不同,并非真的 “连接失败”。

具体可以查看一下实际的仓库类型,是否是私有仓库

1
2
# 查看仓库的远程地址(确认是 gitlab.com 还是私有 GitLab)
git remote -v

输出示例 1(公共 gitlab.com 仓库):

1
2
origin  git@gitlab.com:你的用户名/你的仓库.git (fetch)
origin git@gitlab.com:你的用户名/你的仓库.git (push)

输出示例 2(私有 GitLab 实例 / Deploy Key 授权):

1
2
origin  git@gitlab.company.com:部门/你的仓库.git (fetch)
origin git@gitlab.company.com:部门/你的仓库.git (push)

如果是示例 2,说明你测试的 gitlab.com 和实际操作的 gitlab.company.com 是两个不同的服务器,密钥自然不匹配。

Prev:
如何做一台专属的“豆包”手机
Next:
对照组账号切实验组账号崩溃问题复查