2013-01-09 143 views
3

我使用的顛覆,從內PHPStorm,和我得到以下錯誤,當我嘗試連接到SVN服務器...不匹配

主機SVN的真實性PHPStorm SSH服務器指紋+ ssh://svn.example.com:22不能成立 。 SSH-RSA密鑰指紋是

XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

您確定要繼續連接嗎?

問題是指紋與服務器的指紋不匹配。如果我從我的〜/ .ssh/known_hosts文件中刪除服務器,然後ssh顯示一個完全不同的指紋 - 這對於該服務器來說是正確的。

我剛剛將SVN存儲庫移至新服務器,並將DNS更改爲指向新服務器,因此我期待PHPStorm抱怨指紋不匹配,但我很驚訝它沒有顯示正確的指紋爲新的服務器。指紋與舊服務器不匹配,或者PHPStorm曾經連接過的任何其他服務器。我很擔心讓它連接,直到我明白髮生了什麼。

PHPStorm正確連接到新的服務器,所以我不明白它是如何得到錯誤的指紋,並且似乎不太可能在中間人攻擊中看到一個實際的人,因爲每當我從ssh命令行看到正確的指紋。

我不確定PHPStorm在哪裏緩存服務器指紋。我已經嘗試使緩存無效,看看是否會讓它忘記任何過時的指紋數據,但這似乎不太可能,因爲報告的指紋與舊服務器或新服務器不匹配。

我想得出結論,這是PHPStorm中的一個錯誤,但任何其他想法都會非常受歡迎。

編輯:

PHPStorm顯示一個20字節的指紋。 服務器(的Debian)

SSH-密鑰生成-l -f的/ etc/SSH/ssh_host_rsa_key

顯示一個16字節的指紋上運行這一點,所以它們不可能匹配。有沒有辦法從服務器的公鑰獲取20字節的指紋?

+0

你可以繼續使用'ssh-keygen -l -f/etc/ssh/ssh_host_rsa_key'命令,只需要添加'-E md5'或'-E sha256'來選擇你想要的算法 – caw

回答

3

所以事實證明,160位(20字節)散列PHPStorm顯示是SHA1散列,而ssh-keygen顯示128位(16字節)MD5散列。

無論是對此非常明確的,所以我只是一起引發一個快速的腳本來顯示公鑰的各種哈希值(假設你的公鑰是/etc/ssh/ssh_host_rsa_key.pub

#!/usr/bin/python 

import binascii 
import hashlib 

keyfile = "/etc/ssh/ssh_host_rsa_key.pub" 

def showHash(type, hash, data): 
    hash.update(data) 
    hex=hash.hexdigest() 
    hexbytes=[hex[i:i+2] for i in range(0, len(hex), 2)] 
    hexstring=":".join(hexbytes) 
    print type+" "+hexstring 

f = open(keyfile) 
words = f.readline().split() 
data=words[1] 
bindata=binascii.a2b_base64(data) 

showHash("md5", hashlib.md5(), bindata) 
showHash("sha1", hashlib.sha1(), bindata) 
showHash("sha256", hashlib.sha256(), bindata) 

原來,PHPStorm正在使用SHA1哈希,並且是非常正確的,但是如果您可以選擇在ssh-keygen中使用哪個哈希函數(我相信您可以在sh-keygen-g3中)或者在PHPStorm

+0

今天,PhpStorm 2016。3向我顯示MD5,而'ssh-keygen'似乎默認爲SHA256。所以現在是相反的,但你的問題同樣重要。 – caw