git操作:load pubkey “~/.ssh/id_rsa“: invalid format

背景:在docker内操作git,公钥私钥需要使用宿主机的(可以理解为多台服务器共用一个ssh密钥 ),由于远程仓库公钥,我们这边只能配置一个,所有docker项目就必须使用宿主机上的ssh密钥。

在此说一下,如果远程加了ip白名单,只能宿主机ip访问远程仓库,但你想在宿主机上使用docker,那就可以考虑docker网关使用host方式,即docker与宿主机共享ip

第一步先配置docker,配置好git运行环境,然后将宿主机的~/.ssh 映射到目标容器的~/.ssh目录,且已经配置好~/.gitconfig,username和useremail和宿主机保持一致。宿主机上~/.ssh下存在id_rsa 和 id_rsa.pub、authorized_keys、config文件,宿主机上执行git操作一切正常。

然后在docker中执行git clone、git pull等命令都会出现报错,如下:

load pubkey "~/.ssh/id_rsa": invalid format

虽然出现这个报错,但是不影响运行结果--代码可以克隆、拉取成功。

但我这里的git命令需要在PHP代码中执行,使用PHP的exec函数来执行git操作,所以有任何报错都会导致exec输出的结果失败(即便想要的git操作已经成功了)。这样就没办法在代码中判断执行结果是成功还是失败了,所以必须去除这个烦人的报错。(在PHP中使用exec函数,由于web服务器默认的用户是www-data,可能没有权限去执行一些命令,可以改下)

然后我反复检查了docker中的各种配置,将git的所有配置、ssh的配置都和宿主机保持了一致,但此报错在docker内还是存在。在网上查询了很长时间,百度上大部分相关的文章都看了下,发现并不能消除这个报错。

在外网查了下,终于发现相关解释和处理方式,有兴趣可以看下下面三个连接:

https://blog.hqcodeshop.fi/archives/482-OpenSSH-8.3-client-fails-with-load-pubkey-invalid-format.html

https://bbs.archlinux.org/viewtopic.php?id=256210

https://unix.stackexchange.com/questions/279509/ssh-key-load-public-invalid-format-warning

解决办法: 删除.ssh文件夹下的.pub文件!!!

出现这个问题大致原因是在2018年7月11日,openssh开发人员引入了对加载公钥的检查,并在失败时发出了一个非常具有误导性的错误消息,openssh的git提交链接中这块代码就是导致这个报错的“元凶”:

check_load(sshkey_load_public(filename, &public, NULL),
    filename, "pubkey");

。报错看似是私钥的问题,其实是对公钥的检查导致的,即便你在执行命令的时候不需要公钥,也要去检查下公钥文件。大部分人都说是在OpenSSH 8.3版本后出现的这个问题。我看了下docker中的版本:ssh -V

OpenSSH_7.9p1 Debian-10+deb10u2, OpenSSL 1.1.1d  10 Sep 2019

发现我这出问题的是7.9版本啊,然后又看了下git提交链接,对比了版本发现,其实那些校验是在7.8版本加上的,也就是说从7.8版本开始就会出现这个报错了。服务器上6.6版本所以没问题。

如果你遇到了这个烦人的报错,试验了很多方式都解决不了的话,不妨试试这个方法!


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32737755/article/details/128660487

你可能感兴趣的:(docker,linux,git,git,ssh,docker)