web-dev-qa-db-ja.com

SSHキーフィンプリントとは何ですか?また、どうのように生成されますか?

私は常に新しいマシンにsshしたときにこのメッセージが出るのを見つけます。

12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53

それは何の略ですか?すべてのマシンに毎回同じフィンガープリントがありますか?

これらの指紋はどのように生成されますか?それらはどのようなパラメータに依存しますか?

110
Kit Ho

フィンガープリントは、ホストの公開鍵に基づいており、通常は "/etc/ssh/ssh_Host_rsa_key.pub"に基づいています。一般的に、接続しているホストを簡単に識別/確認するためのものです。

指紋が変わった場合は、接続しているマシンが公開鍵を変更しています。これは悪いことではないかもしれません(sshを再インストールすることで起こります)が、同じドメイン/ IPで別のマシンに接続していること(ロードバランサーのようなものを通して接続しているときに起こります)攻撃者がどういうわけかあなたのユーザ/ pwを詮索しているかもしれない別のホストに接続するためにあなたのssh接続を傍受/再ルーティングしている中間者攻撃を狙っています。

結論:フィンガープリントの変更を警告された場合は、慎重に注意し、安全な接続で実際に正しいホストに接続していることを再確認してください。ほとんどの場合これは無害ですが、潜在的な問題の兆候である可能性があります。

参照してください: http://www.lysium.de/blog/index.php?/archives/186-How-to-get-ssh-server-fingerprint-information.html
and: http://ja.wikipedia.org/wiki/Public_key_fingerprint

58
madmaze

次のようにssh-keygenを使って公開鍵のフィンガープリントを生成できます。

ssh-keygen -lf /path/to/key.pub

具体例(RSA公開鍵を使用している場合)

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

最初の部分の(2048)はビット単位の鍵の長さ、2番目の部分の(00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff)は公開鍵のフィンガープリント、そして3番目の部分は公開鍵ファイル自体の場所です。

90
Benjamin Oakes

フィンガープリントは、Base64でエンコードされた公開鍵内のバイナリデータに対するMD5です。

$ ssh-keygen -f foo
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in foo.
Your public key has been saved in foo.pub.
The key fingerprint is:
65:30:38:96:35:56:4f:64:64:e8:e3:a4:7d:59:3e:19 andrew@localhost
The key's randomart image is:
+--[ RSA 2048]----+
|       +*..+*    |
|      =. +.=     |
|     . . .o .    |
|         o+   E  |
|        S= . + o |
|        . o o +  |
|           .   . |
|                 |
|                 |
+-----------------+
$ cat foo.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp andrew@localhost
$ echo 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp' \
    | base64 -D | md5
6530389635564f6464e8e3a47d593e19

Md5sum 6530389635564f6464e8e3a47d593e19は、キーが生成されたときに表示されるフィンガープリントです。区切りコロンは含まれていません。


ただし、AmazonがEC2 Key Pairsコンソールに表示するフィンガープリントを扱っている場合は、残念ながら これは別の方法になる可能性があります 。 32桁の16進数文字列の場合は、上記の標準のMD5 SSH公開鍵フィンガープリントです。ただし、40桁の16進数の場合、PKCS#8形式の秘密鍵のSHA1を使用して計算されたフィンガープリントです。

$ openssl pkcs8 -in foo -nocrypt -topk8 -outform DER | openssl sha1 -c
e2:77:39:d3:53:a7:62:68:5f:da:82:0e:99:61:30:64:a2:88:c4:58
64
andrew.n

SSHキーファイルをチェックして、それがgithubによって「Deployキー」として報告されているものと同じかどうかを確認したい場合、これはあなたのためです...

Github.com/username/repo_name/setting/keysから: screenshot from github

ターミナルで:

$ ls -l id*
-rw-------  1 bruno  staff  1675 Mar 29 17:03 id_rsa
-rw-r--r--  1 bruno  staff   416 Mar 29 17:03 id_rsa.pub

$ ssh-keygen -E md5 -lf id_rsa
2048 MD5:de:ad:be:ef:15:34:15:3d:1e:a0:19:c5:09:3a:4e:95 [email protected] (RSA)

$ ssh-keygen -E md5 -lf id_rsa.pub
2048 MD5:de:ad:be:ef:15:34:15:3d:1e:a0:19:c5:09:3a:4e:95 [email protected] (RSA)

秘密鍵と公開鍵の両方で同じフィンガープリントを取得していることがわかります。

3
Bruno Bronosky
ssh-keygen -r Host.name.com

Sshdインスタンスに設定されているすべての公開鍵のフィンガープリントを出力します。

これらは DNS SSHFP レコードに入れることができます。

0
Mike Schroll