同一台电脑管理多个 SSH Key
同一台电脑管理多个 SSH Key - 详细内容介绍
场景
在同一台电脑上,可能需要管理多个 SSH Key,例如:
- 一个用于个人项目
- 一个用于工作项目
但是又不想切换各种配置文件,那么就可以使用本文的方法。
生成 SSH key
在终端执行以下命令(推荐使用 ed25519 算法):
ssh-keygen -t ed25519 -C "your_email@example.com"如果你需要兼容旧系统,可以使用 rsa:
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
eval "$(ssh-agent -s)" # 启动 ssh-agent
ssh-add ~/.ssh/id_ed25519 # 添加密钥(如果是 RSA 则是 id_rsa)复制 SSH 公钥
执行以下命令复制公钥:
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:
ssh -T git@github.com如果成功,你会看到类似:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.完成!你现在可以使用 SSH 连接 Git、服务器等。🚀
生成两个 SSH Key
为两个账户分别生成 SSH Key(这里以 work@example.com 和 personal@example.com 为例):
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:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_work
ssh-add ~/.ssh/id_ed25519_personal配置 ~/.ssh/config
在 ~/.ssh/config(没有就创建一个)中添加以下内容:
# 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 里:
cat ~/.ssh/id_ed25519_work.pub
cat ~/.ssh/id_ed25519_personal.pub- 登录 GitHub,进入 Settings → SSH and GPG keys,添加相应的公钥。
克隆或修改 Git 远程仓库
如果你需要分别使用不同账号,你需要使用 git@github-work 或 git@github-personal。
示例 1:克隆仓库
git clone git@github-personal:your-personal-username/personal-repo.git
git clone git@github-work:your-work-username/work-repo.git示例 2:修改已存在仓库的远程地址 进入已有项目文件夹,运行:
git remote set-url origin git@github-work:your-work-username/work-repo.git或者:
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 远程仓库地址:
git remote -v如果你看到的是 HTTPS 地址,例如:
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 地址
git remote set-url origin git@github.com:your-username/repo-name.git然后再尝试推送
git push --set-upstream origin main第二种 SSH Key 未正确加载
你可能需要手动添加你的 SSH Key 到 ssh-agent:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519 # 你的 SSH Key 路径,可能是 id_rsa然后测试 SSH 连接:
ssh -T git@github.com如果成功,你会看到:
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:
ssh-add -l如果返回 The agent has no identities,说明 ssh-agent 没有加载任何 Key。你需要手动添加:
ssh-add ~/.ssh/id_ed25519_work
ssh-add ~/.ssh/id_ed25519_personal如果每次重启后 Key 仍然丢失,你可以让 ssh-agent 永久记住 SSH Key:
ssh-add --apple-use-keychain ~/.ssh/id_ed25519_work # 适用于 macOS
ssh-add -K ~/.ssh/id_ed25519_work # macOS 旧版本
ssh-add ~/.ssh/id_ed25519_work # Linuxssh-v
ssh -v(verbose 模式)用于 调试 SSH 连接,查看 SSH 具体使用了哪个 Key 进行认证。
👉 调试 SSH 连接
ssh -vT git@github.com输出内容会显示:
- SSH 连接的详细过程
- 是否使用了正确的 SSH Key
- SSH 认证是否成功
如果你在调试多个 SSH Key,可以运行:
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,自动匹配不同账号 |