背景:在docker內(nèi)操作git,公鑰私鑰需要使用宿主機(jī)的(可以理解為多臺(tái)服務(wù)器共用一個(gè)ssh密鑰 ),由于遠(yuǎn)程倉(cāng)庫(kù)公鑰,我們這邊只能配置一個(gè),所有docker項(xiàng)目就必須使用宿主機(jī)上的ssh密鑰。
在此說(shuō)一下,如果遠(yuǎn)程加了ip白名單,只能宿主機(jī)ip訪問(wèn)遠(yuǎn)程倉(cāng)庫(kù),但你想在宿主機(jī)上使用docker,那就可以考慮docker網(wǎng)關(guān)使用host方式,即docker與宿主機(jī)共享ip
第一步先配置docker,配置好git運(yùn)行環(huán)境,然后將宿主機(jī)的~/.ssh 映射到目標(biāo)容器的~/.ssh目錄,且已經(jīng)配置好~/.gitconfig,username和useremail和宿主機(jī)保持一致。宿主機(jī)上~/.ssh下存在id_rsa 和 id_rsa.pub、authorized_keys、config文件,宿主機(jī)上執(zhí)行g(shù)it操作一切正常。
然后在docker中執(zhí)行g(shù)it clone、git pull等命令都會(huì)出現(xiàn)報(bào)錯(cuò),如下:
load pubkey "~/.ssh/id_rsa": invalid format
雖然出現(xiàn)這個(gè)報(bào)錯(cuò),但是不影響運(yùn)行結(jié)果--代碼可以克隆、拉取成功。
但我這里的git命令需要在PHP代碼中執(zhí)行,使用PHP的exec函數(shù)來(lái)執(zhí)行g(shù)it操作,所以有任何報(bào)錯(cuò)都會(huì)導(dǎo)致exec輸出的結(jié)果失敗(即便想要的git操作已經(jīng)成功了)。這樣就沒(méi)辦法在代碼中判斷執(zhí)行結(jié)果是成功還是失敗了,所以必須去除這個(gè)煩人的報(bào)錯(cuò)。(在PHP中使用exec函數(shù),由于web服務(wù)器默認(rèn)的用戶是www-data,可能沒(méi)有權(quán)限去執(zhí)行一些命令,可以改下)
然后我反復(fù)檢查了docker中的各種配置,將git的所有配置、ssh的配置都和宿主機(jī)保持了一致,但此報(bào)錯(cuò)在docker內(nèi)還是存在。在網(wǎng)上查詢了很長(zhǎng)時(shí)間,百度上大部分相關(guān)的文章都看了下,發(fā)現(xiàn)并不能消除這個(gè)報(bào)錯(cuò)。
在外網(wǎng)查了下,終于發(fā)現(xiàn)相關(guān)解釋和處理方式,有興趣可以看下下面三個(gè)連接:
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文件!??!
出現(xiàn)這個(gè)問(wèn)題大致原因是在2018年7月11日,openssh開(kāi)發(fā)人員引入了對(duì)加載公鑰的檢查,并在失敗時(shí)發(fā)出了一個(gè)非常具有誤導(dǎo)性的錯(cuò)誤消息,openssh的git提交鏈接中這塊代碼就是導(dǎo)致這個(gè)報(bào)錯(cuò)的“元兇”:
check_load(sshkey_load_public(filename, &public, NULL),
filename, "pubkey");
。報(bào)錯(cuò)看似是私鑰的問(wèn)題,其實(shí)是對(duì)公鑰的檢查導(dǎo)致的,即便你在執(zhí)行命令的時(shí)候不需要公鑰,也要去檢查下公鑰文件。大部分人都說(shuō)是在OpenSSH 8.3版本后出現(xiàn)的這個(gè)問(wèn)題。我看了下docker中的版本:ssh -V
OpenSSH_7.9p1 Debian-10+deb10u2, OpenSSL 1.1.1d 10 Sep 2019
發(fā)現(xiàn)我這出問(wèn)題的是7.9版本啊,然后又看了下git提交鏈接,對(duì)比了版本發(fā)現(xiàn),其實(shí)那些校驗(yàn)是在7.8版本加上的,也就是說(shuō)從7.8版本開(kāi)始就會(huì)出現(xiàn)這個(gè)報(bào)錯(cuò)了。服務(wù)器上6.6版本所以沒(méi)問(wèn)題。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-422077.html
如果你遇到了這個(gè)煩人的報(bào)錯(cuò),試驗(yàn)了很多方式都解決不了的話,不妨試試這個(gè)方法!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-422077.html
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/qq_32737755/article/details/128660487
到了這里,關(guān)于git操作:load pubkey “~/.ssh/id_rsa“: invalid format的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!