设备信息
- 系统:win11
- git 版本:git version 2.33.1.windows.1
- OpenSSH_8.8p1, OpenSSL 1.1.1l 24 Aug 2021
问题描述
按照常规方法生成 ssh key ,并将 public key 添加到 gitlab 账户中后,ssh 链接失败,一直报错 permission denied:(public key; key-arcitective)
使用 $ ssh -vvv git@gitlab.com
可调试 ssh ,结果如下:
......
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
Permission denied, please try again.
git@git.bdaa.pro's password:
debug3: send packet: type 50
debug2: we sent a password packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
git@git.bdaa.pro: Permission denied (publickey,gssapi-with-mic,password).
在网上查询了若干方法之后仍旧没有效果,比如:
- 重新生成 sshkey。
本人重新生成了 n 次,依旧没有成功连接…
- 在
~/.ssh
目录下增加config
或者authority_keys
文件。
别加了,设置了也没用,因为新版的 git 不认可你在自己这个目录下的设置文件。
- 说最新版本的 openssh 默认不能解析用 rsa 算法生成的 keys,建议我换一种算法生成 keys。
这个说对了一半吧,但我的问题根源不在这里。
分析
通过调用 $ ssh -vvv git@gitlab.com
查看详细的报错信息,我发现每次本地寻找私钥的时候都找不到对应的文件,但是这些文件的路径是正确的呀,我开始思考是不是在 ssh_config 文件中没有设置对应的路径呢?
起初,我在 .ssh
文件夹下建立了 config 文件,并做了一些设置,但是再次调试发现,ssh 运行时并没有使用我在 config 里的设置。
于是,我找到了 git 安装目录下的 ssh_config: C:\Program Files\Git\etc\ssh\ssh_config
发现里面大部分的设置都被注释掉了(恍然大悟,应该就是在这里设置了)
解决方法
在 git 安装目录下,找到 ssh_config 文件( C:\Program Files\Git\etc\ssh\ssh_config
),做出如下设置:
Host *
IdentityFile ~/.ssh/id_rsa # 写明 key 的位置
HostkeyAlgorithms +ssh-rsa # 使 openssh 支持 rsa 算法
PubkeyAcceptedAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
重新用 ssh 连接远程库,连接成功!!!