(记录在使用git的ssh秘钥时遇到的问题)

git推送过程中常见错误:

Access deined: You do not have permission push to this repository
fatal: Could not read from remote repository.

环境

  1. git已经添加公钥
  2. 而且是同一台主机生成并添加了多个git的账号ssh秘钥。

期间我网上查找解决的办法,大多是说没有添加公钥,添加公钥要在账号下而不是在仓库下添加,或者就是说账号的主邮箱必须是公钥中的那个添加的邮箱,不管是不是对的,都尝试了下,都不行,

运行命令:ssh-keygen -t rsa -C ‘your_email@example.com’ ;【邮箱仅仅是识别用的key,你可以输入任何内容作为 注释!】
 -t 指定密钥类型,默认是 rsa ,可以省略。
 -C 设置注释文字,比如邮箱。
 -f 指定密钥文件存储文件名。
 以上代码省略了 -f 参数,因此,运行上面那条命令后会让你输入一个文件名,用于保存刚才生成的 SSH key 代码。

最后再验证git时才发现原因所在,如下:

ssh -T git@gitee.com

显示的是darktom账号的连接情况。但是我此时是配置的另外一个账号的公钥。

最后查阅资料大概了解了,一般git会通过 ssh -T git@host 去寻找 .ssh中的config文件对应的host与hostname以及使用正确的私钥去和对应账号下的公钥匹配,改文件不是自己生成的。默认情况下是没有的,也就是说没有此文件时 ,不论添加多少个账号的秘钥对,ssh -T git@host 连接测试都只是会测试第一次配置git账号秘钥对间 (host默认对应的私钥 与 账号的公钥) 的连接。所以说我们要添加 其host与其对应使用的秘钥间的映射关系表。

image-20210118104825476

如下,在 ~/ .ssh 路径下创建 config文件

#gitee1 第一个gitee的账号

Host gitee.com
Hostname gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa


#gitee2 第二个gitee账号

Host gitee2.com
Hostname gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa6
  • host: 对应的自定义主机名
  • hostname : 对应的gitee的域名
  • PreferredAuthentications:公钥
  • IdentityFile: 验证的本地私钥文件

(以此针对不同的host 使用不同的私钥文件去进行验证,当然不同账号的公钥也得与其私钥匹配且不同了。)

最后验证结果

image-20210118111142282