github的ssh密钥的一次使用错误

问题出现

有多个github 账号的配置ssh的情况下,使用git通过git协议去访问使用另一个账号的仓库的时候, 就出现了问题。整体效果就是clone、pull、push这些操作都是报错找不到仓库。

1
2
3
4
ERROR: Repository not found.
致命错误:无法读取远程仓库。

请确认您有正确的访问权限并且仓库存在。

在github网站也确认了仓库的存在。 ssh -T git@github.com 是可以正常显示成功连接的。

这里细心一点,其实就能发现问题了,因为账号名不对。 但可惜的是我没有发现

问题原因

问题原因就是这个ssh密钥使用的问题。我使用了ssh-agent管理我的密钥。第一个账号的git可以正常使用,是因为刚好, 进行ssh密钥匹配的顺序,第一个账号的ssh密钥在前面,就公钥匹配上了,进行私钥匹配,成功进入账号。

而在要使用第二个账号的仓库地址的时候,由于按照匹配顺序,github先匹配上了第一个账号的ssh密钥。 于是,我实际链接的账号是第一个账号,然后按照第二个账号的地址去索引,就会找不到仓库。

问题解决

这里就涉及到如何指定ssh密钥的问题。现在 2.40.1 的 git 还是没有如同ssh的"-i"。 git clone -i ~/.ssh/xx git@github.com:xx/xx.git 这样的命令是会直接报错的。

我在网上搜索找到了一篇博客,里面有说道通过设置 “GIT_SSH” 变量或者使用脚本封装的方式实现指定ssh密钥文件。 https://zhangnew.com/how-to-specify-an-ssh-key-file-with-the-git-command.html

最近在网上才发现(https://segmentfault.com/a/1190000019014740),可以使用ssh的配置文件更简单的使用。配置如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# defualt
Host github.com
	HostName github.com
	IdentitiesOnly yes
	IdentityFile ~/.ssh/github/xxxx

# specify key file
Host github-one
	HostName github.com
	IdentitiesOnly yes
	IdentityFile ~/.ssh/github/xxxx

# use ssh-agent
Host github-two
	HostName github.com

第一个用于设置github连接的默认的密钥,因为我希望默认不要使用ssh-agent中的密钥,所以需要配置这个。 后面则是通过设置Host,实现分别使用不同的密钥的效果。

1
2
3
git clone git@github.com:xxx/yyy.git    # 使用设置的默认密钥
git clone git@github-one:xxx/yyy.git    # 使用指定密钥文件的密钥
git clone git@github-two:xxx/yyy.git    # 默认的优先ssh-agent
本博客所有文章除特别声明外,均采取 CC BY-NC-SA 4.0 许可协议。转载请附上链接
最后更新于 Jun 03, 2023 21:24 CST
使用 Hugo 构建
主题 StackJimmy 设计