我在PHPStorm内使用subversion,当我尝试连接到SVN服务器时,我得到以下错误…
host svn+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的一个bug,但是任何其他的想法都是非常受欢迎的。
编辑:PHPStorm显示一个20字节的指纹。在服务器(debian)上运行
ssh-keygen -l -f/etc/ssh/ssh_host_rsa_key
显示一个16字节的指纹,所以它们不可能匹配。有没有办法从服务器的公钥中获得20字节的指纹?
所以PHPStorm显示的160位(20字节)哈希是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中使用哪个哈希函数,这将是有帮助的。