背景:在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版本所以没问题。文章来源:https://www.toymoban.com/news/detail-422077.html
如果你遇到了这个烦人的报错,试验了很多方式都解决不了的话,不妨试试这个方法!文章来源地址https://www.toymoban.com/news/detail-422077.html
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32737755/article/details/128660487
到了这里,关于git操作:load pubkey “~/.ssh/id_rsa“: invalid format的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!