由于SSH配置文件的不匹配,導致的Permission denied (publickey)及其解決方法

讀者如要轉載,請標明出處和作者名,謝謝。?
地址01:http://space.itpub.net/25851087?
地址02:http://www.cnblogs.com/zjrodger/?
作者名:zjrodger?

【問題發生環境和相關參數】

(1)OS:Win7 32Bit.

(2)Git:GitHub for Windows 2.0.

? ? 下載地址:https://windows.github.com/

(3)Command Shell:Git Shell.

【問題重現描述】
? ? 在Win7本地平臺上安裝完Github for Windows 2.0后,要在本地生成密匙,向Github上上傳密匙并且進行網絡連通性測試。
①利用命令“ssh-keygen -t rsa -C "zjrodger@163.com" 生成SSH密匙(id_rsaid_rsa.pub)后,將本地的“id_rsa.pub”文件中的內容上傳到Github上的個人“SSH Keys”管理項中,從而生成一個新的SSH Keys。
②之后,進行本地與Remote Server(Github網站)的連接測試,命令和結果如下所示:
F:\Workspaces\Github_Workspace>?ssh -T?git@github.com?
Warning: Permanently added 'github.com,192.30.252.131' (RSA) to the list of know?
n hosts.?
Permission denied (publickey).
? ? 在Windows的PowerShell中輸入“ssh -T?git@github.com”,結果出現“Permission Denied(publickey)


【問題原因】
? ? 在Github for Windows 2.0默認的安裝配置中,?
SSH的配置文件ssh_config中的IdentityFile“?
與實際情況不相符。
(1)原來默認情況下的IdentifyFile的值
在Github for Windows 2.0上(默認安裝情況下),SSH的配置文件ssh_config中的IdentityFile(其值為密匙的全路徑名)這項信息的內容是“~/.ssh/github_rsa”,如下命令所示:
Host github.com
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
IdentityFile=~/.ssh/github_rsa
?
(2)實際的情形
實際上,通過命令“ssh-keygen -t rsa -C "zjrodger@163.com”生成的新的SSH密匙全路徑名為:~/.ssh/id_rsa~/.ssh/id_rsa.pub”。
?
注意~/.ssh/github_rsa ?不等于?~/.ssh/id_rsa
?
(3)結論
①Git默認安裝情況下,ssh_config配置文件中的“IdentityFile”項的值:IdentityFile=~/.ssh/github_rsa
②實際的IdentityFile的值:IdentityFile=~/.ssh/id_rsa
如上所述,Github for Windows 2.0在默認安裝情況下,SSH的的配置文件ssh_config中的IdentityFile項的值與實際新創建的密匙全路徑名不相符,結果導致本地的SSH工具無法找到到正確的密匙,進而無法同已經上傳到Github密匙相匹配,結果就出現了“Permission denied (publickey)”這樣的錯誤。

(4)補充
SSH配置文件ssh_config在自己本地的路徑:
C:\Users\Administrator\AppData\Local\GitHub\PortableGit_6d98349f44ba975cf6c762a720f8259a267ea445\etc\ssh
密匙文件的存放路徑:
C:\Users\Administrator\.ssh
ssh_config的原文件(有誤的版本):
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null


Host github.com
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
IdentityFile=~/.ssh/github_rsa
重裝Github for windows 2.0后的新發現(重要)
為了確保正確性,自己將本機的Github for Window 2.0卸載并且重裝了一遍,發現SSH的配置文件ssh_config中的IdentityFile依然是“~/.ssh/github_rsa”。
而重裝后的密匙文件的存放路徑(C:\Users\Administrator\.ssh)下,有四個密匙文件,分別是github_rsagithub_rsa.pubid_rsaid_rsa.pub
這樣,用戶就不用自己新建密匙文件了,只用將“github_rsa.pub”中的內容上傳到Github網站的個人SSH管理中即可。
之后,在本地與Remote端進行網絡連通性測試,發現可以聯通。
這樣,考慮到修改軟件原有配置信息所帶來的隱患,筆者就不推薦自己手動修改SSH的配置文件ssh_config中的IdentityFile字段這個方法了。


【解決方法】
方法一:
? ?在生成新的密匙文件后,若新生成的密匙文件名字為“id_rsa”,則將ssh_config配置文件中的“IdentityFile”項的值改為“~/.ssh/id_rsa
方法二:
將新生成的密匙文件名字改為“github_rsa”,從而與ssh_config配置文件中的“IdentityFile”項的值相同。
方法三:
? ??重裝Github for Window 2.0,不用新建密匙文件,而是用Github自帶的“github_rsa.pub”文件。
總之,不論方法一,放法二還是方法三,一定要保持新生成的密匙文件的名字同“ssh_config”中“IdentityFile”字段的值一致即可。

【參考文檔】
(1)原文鏈接:http://stackoverflow.com/questions/2127104/permission-denied-publickey-error-using-git-on-windows-7

If it says "Permission denied (publickey)" you will?have to put in a passphrase?for your key. Do not be tempted to just press enter...this was what worked for me...it took me five hours to realize that pressing enter made OpenSSH feel that your key was too public so that is why it is denying you from going to the next step.

(2)原文鏈接:http://stackoverflow.com/questions/17383177/permission-denied-publickey-errors-on-windows-when-using-moovweb
So as mentioned in prior answers, the?Permission denied?error in Windows is because you are trying to use a key?other than?id_rsa.
Windows lacks the bells and whistles that Linux and Mac have to try out all your public keys when trying to connect to a server via SSH. If you're using the?ssh?command, you can tell it which key to use by passing the?-i?flag followed by the path to the key to use:
F:\Workspaces\Github_Workspace>?ssh -T?git@github.com?
Warning: Permanently added 'github.com,192.30.252.129' (RSA) to the list of know?
n hosts.?
Permission denied (publickey).?
F:\Workspaces\Github_Workspace>?ssh -i ~/.ssh/id_rsa?git@github.com?
Warning: Permanently added 'github.com,192.30.252.129' (RSA) to the list of know?
n hosts.?
Enter passphrase for key '/c/Users/Administrator/.ssh/id_rsa':?
Hi zjrodger! You've successfully authenticated, but GitHub does not provide shel?
l access.?
Connection to github.com closed.

轉載于:https://www.cnblogs.com/lpdi/p/6816380.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372253.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372253.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372253.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java語言基本語法_Java語言基本語法

Java語言基本語法一、標識符和關鍵字標識符在java語言中,用來標志類名、對象名、變量名、方法名、類型名、數組名、包名的有效字符序列,稱為“標識符”;標識符由字母、數字、下劃線、美元符號組成,且第一個字符不能是數字&#xf…

Maven的鳥瞰圖

我們每天要做的一件事是使用Maven通過發出諸如mvn install之類的構建命令來構建我們的項目。 然后,Maven查看我們項目的配置文件(親切地稱為POM),神奇地找出要執行的操作,并且,嘿,您的構建已完成…

node源碼詳解(五)

本作品采用知識共享署名 4.0 國際許可協議進行許可。轉載保留聲明頭部與原文鏈接https://luzeshu.com/blog/nodesource5 本博客同步在https://cnodejs.org/topic/56ed6735b705742136388fa6 本博客同步在http://www.cnblogs.com/papertree/p/5295344.html 在上一篇博客&#xff…

分層圖+最短路算法 BZOJ 2763: [JLOI2011]飛行路線

2763: [JLOI2011]飛行路線 Time Limit: 10 Sec Memory Limit: 128 MBDescription Alice和Bob現在要乘飛機旅行,他們選擇了一家相對便宜的航空公司。該航空公司一共在n個城市設有業務,設這些城市分別標記為0到n-1,一共有m種航線,每…

java web 保護_java web項目請求控制及簡單漏洞防范

背景:當時項目沒用什么框架,過濾器,請求限制等都需要自己手寫。1、請求加時間戳在后臺過濾器中可以加判斷,如果請求時間戳與服務器時間相差太大,可以返回異常,具體情況可以具體使用。請求中加時間戳的示例如…

Maven最佳實踐

盡管Maven提供了“配置之上的約定”解決方案,但是仍然有足夠多的必要配置引起嚴重的頭痛。 在這篇文章中,我將與您分享一些最佳實踐,以簡化對POM文件的維護。 請勿使用已棄用的引用,例如$ {artifactId}或$ {pom.artifactId}。 使用…

51Nod - 1381 硬幣游戲

51Nod - 1381 硬幣游戲 有一個簡單但是很有趣的游戲。在這個游戲中有一個硬幣還有一張桌子,這張桌子上有很多平行線(如下圖所示)。兩條相鄰平行線之間的距離是1,硬幣的半徑是R,然后我們來拋硬幣到桌子上,拋…

Android中Activity和Fragment之間的通信

Android中Activity和Fragment之間的通信 Fragment啟動Activity傳數據到Fragment 舉例:城市選擇列表。一個Fragment啟動Activity,Activity再把城市選擇數據回傳到Fragment中。Fragment中方法iv_city.setOnClickListener(new View.OnClickListener() {Ove…

NoSQLUnit 0.3.0發布

介紹 單元測試是一種驗證應用程序中可測試的最小部分的方法。 單元測試必須遵循FIRST規則; 這些是快速,隔離,可重復,自我驗證和及時的。 考慮到沒有持久層(典型的關系數據庫或新的NoSQL數據庫)的JEE應用程…

proftpd java_Proftpd:編譯安裝

下載 proftpd# wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.5a.tar.gz# wget https://github.com/proftpd/proftpd/archive/v1.3.5a.tar.gz# yum -y install gcc openssl-devel# ./configure --prefix/usr/local/proftpd/ \--sysconfdir/usr/local/proftpd/ \--ena…

javascript 相關小的知識點集合

本文主要是列出一些javascript 相關的,不限于javascript的,容易記錯或者遺忘的小知識,小技巧。 1、javascript中的false 在 JavaScript,常見的 false 值: 0, 0, 0, -0, false, ,null,undefined,NaN 要注意空數組([])和…

AOS – 另外一個獨特的頁面滾動動畫庫(CSS3)

AOS 是一個用于在頁面滾動的時候呈現元素動畫的工具庫,你可能會覺得它和 WOWJS 一樣,的確他們效果是類似的。但是AOS是 CSS3 動畫驅動的庫,當你滾動頁面的時候能讓元素動起來,當頁面滾回頂部的時候,元素能夠回到前一個…

關于Java包

我希望我們都同意,方法和類應該很小,并且只有很少的依賴關系。 這種觀點被廣泛接受,而對“小”的解釋則各不相同。 關于這一點有很多文獻。 但是包裹呢? 有些人將包視為名稱空間。 因此,包只是允許您為類重用名稱的東西…

python中打開文件時只允許寫入的模式是_詳解python中各種文件打開模式

在python中,總的來說有三種大的模式打開文件,分別是:a, w, r當以a模式打開時,只能寫文件,而且是在文件末尾添加內容。當以a模式打開時,可以寫文件,也可讀文件,可是在讀文件的時候,會發現讀出來的…

KVM 基本硬件容量擴容

在工作當中如果虛擬機的容量不夠使用 如何添加呢? CPU添加 cpu添加有兩種方式: 1 創建虛擬機的時候可以添加 # virt-install --help | grep cpu--vcpusVCPUS Number of vcpus to configure for your guest. Ex:--vcpus 5--vcpus 5,maxcpus10--vcpu…

JavaFX 2.0 Hello World

在討論示例本身之前,我想向您展示如何在NetBeans中創建JavaFX應用程序。 (如果尚未安裝JavaFX和NetBeans,請參閱我以前的文章《 安裝JavaFX 2.0和NetBeans 7.7.1》 )單擊“文件”菜單中的“新建項目”以打開項目向導。 然后選擇“…

java 線程強制停止線程_java多線程之停止線程

在多線程開發中停止線程是非常重要的技術點。停止線程在Java語言中并不像break語句那樣干脆。須要一些技巧性的處理。一、 異常法採用異常法來停止一個線程。首先我們須要了解一下兩個方法的使用方法:1、interrupt()方法public class MyThread extends Thread{Over…

Android 上下文菜單(Context Menu)

一、概述 Android中,上下文菜單是通過onLongClick(...)事件訪問的。在事件觸發后顯示菜單項。 在使用上下文菜單時,通常在onCreate(...)方法中,先行注冊上下文菜單。在實現onCreateContextMenu(...)方法和onContextItemSelected(...)方法。 注…

RGB顏色空間alpha混合的方法

http://blog.csdn.net/xhhjin/article/details/6444782http://blog.csdn.net/xhhjin/article/details/6445460http://www.cnblogs.com/graphics/archive/2012/08/23/2643086.htmlhttp://www.oschina.net/code/snippet_1425046_27446 轉載于:https://www.cnblogs.com/eustoma/p/…

Java怪異實踐

總覽 Java中有許多實踐使我感到困惑。 這里只是一些。 使用-Xmx和-Xms 選項-Xmx廣泛用于設置最大內存大小。 如Java HotSpot VM Options中所述,以-X開頭的選項是非標準的(不保證在所有VM實現中均受支持),并且在以后的JDK發行版中…