2013-01-09 67 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