场景

在同一台电脑上,可能需要管理多个 SSH Key,例如:

  • 一个用于个人项目
  • 一个用于工作项目

但是又不想切换各种配置文件,那么就可以使用本文的方法。

生成 SSH key

在终端执行以下命令(推荐使用 ed25519 算法):

1
ssh-keygen -t ed25519 -C "your_email@example.com"

如果你需要兼容旧系统,可以使用 rsa

1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t ed25519:使用更安全的 ed25519 算法
  • -b 4096:如果使用 rsa,建议 4096 位密钥
  • -C "your_email@example.com":为 SSH Key 添加备注(通常是你的邮箱)

执行上面的命令后系统会提示你选择存储路径,默认存储在 ~/.ssh/id_ed25519(或 ``~/.ssh/id_rsa`)。直接回车使用默认路径,或输入自定义路径。

你可以为 SSH Key 设置密码,增加安全性(如果不想设置,直接回车)。

添加 SSH Key 到 ssh-agent

1
2
3
eval "$(ssh-agent -s)"  # 启动 ssh-agent
ssh-add ~/.ssh/id_ed25519 # 添加密钥(如果是 RSA 则是 id_rsa)

复制 SSH 公钥

执行以下命令复制公钥:

1
2
3
4
cat ~/.ssh/id_ed25519.pub | pbcopy  # macOS
cat ~/.ssh/id_ed25519.pub | xclip -sel clip # Linux(需安装 xclip)
cat ~/.ssh/id_ed25519.pub # Windows 或手动复制

然后将公钥粘贴到 GitHub、GitLab、服务器等的 SSH Key 设置中。

测试 SSH 连接

例如,测试 GitHub:

1
ssh -T git@github.com

如果成功,你会看到类似:

1
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

完成!你现在可以使用 SSH 连接 Git、服务器等。🚀

生成两个 SSH Key

为两个账户分别生成 SSH Key(这里以 work@example.compersonal@example.com 为例):

1
2
3
ssh-keygen -t ed25519 -C "work@example.com" -f ~/.ssh/id_ed25519_work
ssh-keygen -t ed25519 -C "personal@example.com" -f ~/.ssh/id_ed25519_personal

添加 SSH Key 到 ssh-agent,启动 ssh-agent 并添加两个 SSH Key:

1
2
3
4
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_work
ssh-add ~/.ssh/id_ed25519_personal

配置 ~/.ssh/config

~/.ssh/config(没有就创建一个)中添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
# GitHub 工作账号
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work

# GitHub 个人账号
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal

这个配置的作用是:

  • 当你访问 github-work,使用 id_ed25519_work
  • 当你访问 github-personal,使用 id_ed25519_personal

添加 SSH Key 到 GitHub

运行以下命令,分别复制公钥,并添加到对应 GitHub 账号的 SSH Keys 里:

1
2
cat ~/.ssh/id_ed25519_work.pub
cat ~/.ssh/id_ed25519_personal.pub
  • 登录 GitHub,进入 Settings → SSH and GPG keys,添加相应的公钥。

克隆或修改 Git 远程仓库

如果你需要分别使用不同账号,你需要使用 git@github-workgit@github-personal

示例 1:克隆仓库

1
2
git clone git@github-personal:your-personal-username/personal-repo.git
git clone git@github-work:your-work-username/work-repo.git

示例 2:修改已存在仓库的远程地址 进入已有项目文件夹,运行:

1
git remote set-url origin git@github-work:your-work-username/work-repo.git

或者:

1
git remote set-url origin git@github-personal:your-personal-username/personal-repo.git

可能会出现的问题

已经把ssh key 放到 Github 了,但是本地推送代码提示:
git push --set-upstream origin main ERROR: Repository not found. fatal: 无法读取远程仓库。

你的错误信息 ERROR: Repository not found.(找不到仓库)和 无法读取远程仓库 可能是由以下几个原因导致的:

第一种 远程仓库 URL 配置错误

先检查你当前项目的 Git 远程仓库地址:

1
git remote -v

如果你看到的是 HTTPS 地址,例如:

1
2
origin  https://github.com/your-username/repo-name.git (fetch)
origin https://github.com/your-username/repo-name.git (push)

这说明你在用 HTTPS,而 SSH Key 只对 SSH 地址有效。

解决方案:修改为 SSH 地址

1
git remote set-url origin git@github.com:your-username/repo-name.git

然后再尝试推送

1
git push --set-upstream origin main

第二种 SSH Key 未正确加载

你可能需要手动添加你的 SSH Key 到 ssh-agent

1
2
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519 # 你的 SSH Key 路径,可能是 id_rsa

然后测试 SSH 连接:

1
ssh -T git@github.com

如果成功,你会看到:

1
Hi your-username! You've successfully authenticated, but GitHub does not provide shell access.

如果失败,说明你的 SSH Key 可能没有正确配置到 GitHub。

如果你已经在 ~/.ssh/config 中配置了,但是依然报错,很有可能是:

即使 ~/.ssh/config 配置了 IdentityFile,SSH 可能不会自动加载 Key,特别是在 macOS 或某些 Linux 发行版 上。你可以尝试手动查看 ssh-agent 是否已经加载了你的 Key:

1
ssh-add -l

如果返回 The agent has no identities,说明 ssh-agent 没有加载任何 Key。你需要手动添加:

1
2
ssh-add ~/.ssh/id_ed25519_work
ssh-add ~/.ssh/id_ed25519_personal

如果每次重启后 Key 仍然丢失,你可以让 ssh-agent 永久记住 SSH Key

1
2
3
ssh-add --apple-use-keychain ~/.ssh/id_ed25519_work  # 适用于 macOS
ssh-add -K ~/.ssh/id_ed25519_work # macOS 旧版本
ssh-add ~/.ssh/id_ed25519_work # Linux

ssh-v

ssh -vverbose 模式)用于 调试 SSH 连接,查看 SSH 具体使用了哪个 Key 进行认证。

👉 调试 SSH 连接

1
ssh -vT git@github.com

输出内容会显示:

  • SSH 连接的详细过程
  • 是否使用了正确的 SSH Key
  • SSH 认证是否成功

如果你在调试多个 SSH Key,可以运行:

1
2
ssh -vT github-work
ssh -vT github-personal

这可以帮助你确认 SSH 是否走了正确的 Key。

总结

如果 ~/.ssh/config 没生效,可以依次尝试:

✅ 1. 检查 ssh-agent 是否正确加载 Key (ssh-add -l)
✅ 2. 确保 Git 远程仓库使用的是 SSH 地址 (git remote -v)
✅ 3. 测试 SSH 连接是否走对了 Key (ssh -vT github-work)
✅ 4. 确认 GitHub 账户里添加了正确的 SSH Key
✅ 5. ssh-agent 自动加载 Key,避免重启丢失

命令 作用
eval “$(ssh-agent -s)” 启动 ssh-agent,让 SSH Key 在当前会话中生效
ssh-add ~/.ssh/id_ed25519_work 手动添加 SSH Key 到 ssh-agent
ssh-add -l 查看 ssh-agent 已加载的 SSH Key
ssh -T git@github.com 测试 SSH 连接是否成功
ssh -vT git@github.com 详细调试 SSH 连接
git remote -v 查看 Git 远程仓库地址
git remote set-url origin git@github.com:your-username/repo-name.git 修改 Git 远程仓库为 SSH
cat ~/.ssh/id_ed25519.pub 查看 SSH 公钥并添加到 GitHub
~/.ssh/config 配置多个 SSH Key,自动匹配不同账号