3

PHPStorm内からSubversionを使用していますが、SVNサーバーに接続しようとすると次のエラーが発生します...

ホスト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のバグであるという結論に達しましたが、他の考えは大歓迎です。

編集:

PHPStormは20バイトのフィンガープリントを表示しています。これをサーバーで実行する(debian)

ssh-keygen -l -f / etc / ssh / ssh_host_rsa_key

16バイトの指紋を表示するため、一致しない可能性があります。サーバーの公開鍵から20バイトのフィンガープリントを取得する方法はありますか?

4

1 に答える 1

3

したがって、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で使用するハッシュ関数を選択できると便利です。

于 2013-01-09T13:29:58.287 に答える