多个ssh秘钥导致Git push失败及其解决方案

前言

自从上次更换Mac,导致Hexo文件丢失后居然已经N年没有写Blog,最近心血来潮打算重新开始拾起来,于是便新建了一个Hexo将以前的替换,重新开始,索性便将遇到的问题当做这个Blog的第一篇吧。

解决方案请直接看最后,中间都是无用废话

起因

因为向GitHub推送内容需要ssh秘钥,但是我本地已经有了gitlab的秘钥,我又不想替换于是便Google一下如何配置多个ssh秘钥,命令如下:

1
ssh-keygen -t rsa -f ~/.ssh/id_rsa.别名 -C "邮箱地址"

比如要生成GitHub的ssh就可以这样:

1
ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C "邮箱地址"

我看完命令后直接生成完秘钥就关闭网页,这就导致我后面的一系列踩坑,不过幸亏有ChatGPT让我的坑踩得容易多了, 当然这都是后话了。

然后我就继续搭建Blog,当本地预览没问题后,我hexo d 后终端开始报错:

1
2
3
4
5
6
7
8
9
10
11
12
git@github.com: Permission denied (publickey).
fatal: 无法读取远程仓库。

请确认您有正确的访问权限并且仓库存在。
FATAL {
err: Error: Spawn failed
at ChildProcess.<anonymous> (/Users/lee/blog/node_modules/hexo-util/lib/spawn.js:51:21)
at ChildProcess.emit (node:events:390:28)
at Process.ChildProcess._handle.onexit (node:internal/child_process:290:12) {
code: 128
}
} Something's wrong. Maybe you can find the solution here: %s https://hexo.io/docs/troubleshooting.html

继续使用ssh -T git@github.com发现并没有出现success,猜想可能是秘钥生成错误,但是检查一遍后发现并不是,继续使用ssh -vT git@github.com查看log,发现查找本地秘钥的时候并没有找到有别名的ssh秘钥,所以大概知道问题出在哪了。

过程

直接ChatGPT开问,它直接告诉我三条命令

  1. 打开终端并运行以下命令:
1
eval "$(ssh-agent -s)"
  1. 确保 ssh-agent 正在运行。如果输出显示了 “Agent pid” 和一个数字,则说明 ssh-agent 正在运行。如果没有输出,则说明 ssh-agent 没有启动,您需要重新运行上述命令。
  2. 将 SSH 私钥文件添加到 ssh-agent 中。运行以下命令:
1
ssh-add ~/.ssh/id_rsa.github
  1. 复制您的 SSH 公钥。运行以下命令来复制您的公钥:
1
pbcopy < ~/.ssh/id_rsa.github.pub

确实解决了,但是重启iTerm后发现又不能push了,继续问

AI直接让我改终端配置文件,然并无卵用,倒是陷入坑中跟ChatGPT聊天浪费不少时间。

解决

最后直接转换话题,问ChatGPT如何在Mac中配置多个ssh秘钥,给出结论和我开始的操作一样,不一样的是新增了config文件,真相大白,原因即是配置配置多个秘钥让Git可以识别不同的。

具体的方法如下:

在 Mac 上配置多个 SSH 秘钥的步骤如下:

  1. 生成多个密钥对

在终端中执行以下命令生成多个密钥对:

1
2
ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/id_rsa_1
ssh-keygen -t rsa -C "your_email@example.com" -f ~/.ssh/id_rsa_2

其中 -f 参数指定了私钥和公钥的文件名,可以根据需要自定义。

  1. 添加私钥到 SSH Agent

执行以下命令将私钥添加到 SSH Agent:

1
2
ssh-add ~/.ssh/id_rsa_1
ssh-add ~/.ssh/id_rsa_2
  1. 配置 SSH 配置文件

~/.ssh/ 目录下创建 config 文件,并按照如下格式配置多个主机和对应的密钥:

1
2
3
4
5
6
7
8
9
10
11
# 第一个主机
Host host1
HostName example.com
User username
IdentityFile ~/.ssh/id_rsa_1

# 第二个主机
Host host2
HostName example.org
User username
IdentityFile ~/.ssh/id_rsa_2

其中 Host 是主机别名,HostName 是主机名或 IP 地址,User 是登录用户名,IdentityFile 是对应的私钥文件路径。

  1. 测试连接

执行以下命令测试连接:

1
2
ssh host1
ssh host2

如果连接成功,则表示配置成功。

这样就可以在 Mac 上使用多个 SSH 秘钥了。

经本人测试,重启终端后也可以正常使用。

后记

做完这一切后,我又找到那个只看了一半就关掉的如何配置多个秘钥的教程,发现后部分就是就是教你如何配置config的,真是被自己气死,看东西只看一半……

附上地址:Mac如何生成并配置多个ssh秘钥_mac 创建多个ssh_牛长犇的博客-CSDN博客


多个ssh秘钥导致Git push失败及其解决方案
https://ilittle.fun/2023/04/13/多个ssh秘钥导致Git-push失败及其解决方案/
作者
Leelt
发布于
2023年4月13日
许可协议