雲服務器上拉取github代碼報錯 Permission denied (publickey)解決方案(親測!100%解決!!!)

首先說一下網上的各種解決方案,如下:

第一種: 說讓在本地生成新的公鑰,然後複製到github上的設置裏的 SSH keys裏保存即可。

解釋: 首先,這個說法沒錯,但是網上說的都是本地電腦用ssh方法拉不下來代碼,用這個辦法,並不是我們所說的問題。實際上我們本地不管用ssh方式還是https方式拉取代碼,都可以成功拉取的。(前提是本地已經有生成的公鑰私鑰,並已經將本地的公鑰配置到了github上)。我們這裏是服務器上拉不下來代碼。

第二種: 使用命令 vim /etc/ssh/ssh_config ,找到#StrictHostKeyChecking ask去掉註釋,並把ask改爲no即可。即修改配置StrictHostKeyChecking yesStrictHostKeyChecking no

解釋: 這個意思是每次主機公鑰確認,就是每次都要詢問,看連接與key是否匹配。如果按這種方式改成 StrictHostKeyChecking no,是一種最不安全的方式,所以不建議這種。

有時候報錯類似於 Permanently added ‘github.com,13.229.188.59’ (RSA) to the list of known hosts 這樣的錯誤。意思是這個新的主機沒有在 hosts 文件列表裏存在,一般第一次報錯後會自己添加到hosts列表裏去,但後續繼續拉取代碼就會報錯 Permission denied (publickey)。此時,有人納悶了,不是已經hosts裏有了嗎,爲什麼還報錯 Permission denied (publickey)。網上可能你會搜到比如讓你刪除 hosts 文件,重新生成 rsa 等等方法,其實沒必要。這裏就給大家說一下一個重要的知識點,說完大家也就明白了,不然在網上搜一大堆全是沒用信息,浪費時間。

這裏給大家講一下密鑰的作用,通俗簡單的講一下,使大家更容易明白些。我們平時可能經常在本地從github拉取代碼,使用ssh拉取都沒有問題,主要就是因爲你本地電腦已經存在了之前你生成的公鑰,一般在 ~/.ssh/ 目錄下,有三個文件: id_rsa(私鑰),id_rsa.pub(公鑰),known_hosts(主機ip等信息記錄)。而且你的github上已經配置了本地的這個公鑰,所以,每次拉取代碼都會成功。其實最主要的就是這個公鑰來辨別身份

那麼服務器上拉取代碼也使用公鑰,原理都相同。首先進入到服務器 cd ~/.ssh/目錄下,此時看你這目錄下面都有什麼文件,如果你以前配置過免密登錄,那麼首先會有一個 authorized_keys 文件,這裏面其實就是複製保存的你本地的 id_rsa.pub(公鑰)內容,因爲這個,你可以實現免密登錄。如果沒有authorized_keys 文件,也不影響啥,那個也只是與你設置免密登陸相關的,與這個報錯沒關係。下面再看還有沒有 id_rsa,id_rsa.pub,known_hosts 這三個文件,如果沒有,則新生成一個,和你本地生成新的密鑰方式一樣,具體生成命令百度很多,自行查看。如果有了,那現在就將 id_rsa.pub 裏面的內容複製,然後登錄github,在配置公鑰那裏新增一條,把剛纔複製的內容粘貼進去並保存。此時,按理來說,你的github SSH Keys配置那裏會有兩條公鑰配置。一個是你本地連接github進行匹配的公鑰;另一個就是你服務器連接github匹配的公鑰。此時,已經完成。只需要你重新登錄服務器測試,你會發現已經可以使用ssh成功地從github上拉取代碼到服務器上了。

原理: 你連服務器的時候,是自己的電腦生成了公鑰,配置到了服務器上。而你從服務器上拉取代碼,則是服務器自己生成的公鑰,配置到了github的倉庫服務器上。是兩個作用於不同位置的,即本地電腦和服務器各自生成了一遍

總結: 這個錯誤的原因還是因爲 github 上缺少你服務器生成的公鑰,所以每次拉取代碼主機公鑰確認就會失敗。添加即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章