RSAキーフィンガープリントの計算


903

GitHubのSSHキー監査を行う必要がありますが、RSAキーのフィンガープリントをどのように見つけるかわかりません。私はもともとLinuxでSSHキーを生成するためのガイドに従っていました。

現在のRSAキーフィンガープリントを見つけるために入力する必要があるコマンドは何ですか?


21
FWIW、私はgithubがキーの指紋を見る場所であり、対応する秘密キーを使用していることを確認したいので、この投稿に戻ってきます。この投稿がgithub関連の問い合わせに役立つので、おそらくそれ githubタグを正当化しますか?
hamx0r 2016年

4
@ hamx0r Gitlabもこれらのフィンガープリントを使用しているため、この投稿に戻ってきました...
Ray Foss

1
トラビスも使っているので、私はそれに行きました。:D
Lundbergによる2018

4
Linuxを使用して「このページに戻ってくる」すべての人は、これをbashrcにコピーします。function fingerprint() { ssh-keygen -lf $1 -E md5 }次に(bashrcを入手した後)、指紋を取得できますfingerprint ~/.ssh/key_file
Jeff Diederiks

1
@JeffDiederiks関数を試し、なぜそれが機能しないのか疑問に思う方のために、Bash関数;は本文の末尾が必要なので、function fingerprint() { ssh-keygen -lf $1 -E md5; }代わりに使用します。
tjjfvi

回答:


1261

次のコマンドを実行して、SSHキーのSHA256フィンガープリントを取得します(-l新しいキーを作成する代わりに「リスト」を-f意味し、「ファイル名」を意味します)。

$ ssh-keygen -lf /path/to/ssh/key

たとえば、私のマシンで実行したコマンドは(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)

新しいバージョンのssh-keygenでGitHub(MD5)フィンガープリント形式を取得するには、次のコマンドを実行します。

$ ssh-keygen -E md5 -lf <fileName>

ボーナス情報:

ssh-keygen -lf も動作します known_hostsおよびauthorized_keysファイルでます。

Linux / Unix / OS Xシステムでほとんどの公開鍵を見つけるには、次を実行します。

$ find /etc/ssh /home/*/.ssh /Users/*/.ssh -name '*.pub' -o -name 'authorized_keys' -o -name 'known_hosts'

(他のユーザーのホームディレクトリ内を見たい場合は、rootまたはsudoである必要があります。)

ssh-add -l非常に似ていますが、あなたのエージェントに追加の鍵の指紋を示しています。(OS Xユーザーは、キーチェーンを介したマジックパスワードレスSSHはssh-agentを使用する場合と同じではないことに注意してください。)


5
パスを確認するにはどうすればよいですか?
pal4life

4
16進数の指紋の例は32桁なので、MD5の指紋だと思いますよね?SHA1示すことになる40桁の指紋とは対照的に
culix

8
非Ubuntuのシステムでは、関連するファイルがであってもよいの/ etc / sshを、例えば/etc/ssh/ssh_host_rsa_key.pub
Zorawar

12
フィンガープリントは公開鍵と秘密鍵のペアの両方の鍵で同じでなければならないことに注意してください。したがって、の指紋はの指紋と.ssh/id_rsa同じである必要があり.ssh/id_rsa.pubます。したがって、どちらでも使用できます(そして、私と同じようにタブ補完が好きな場合は、キーストロークが2回少なくなります。効率!)。
パルティアンショット

25
ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pub標準のsha256出力が必要ない場合に使用します
user8162

676

新しいSSHコマンドは、指紋をSHA256キーとしてリストします。

例えば:

ssh-keygen -lf ~/.ssh/id_dsa.pub 
1024 SHA256:19n6fkdz0qqmowiBy6XEaA87EuG/jgWUr44ZSBhJl6Y (DSA)

古い指紋と比較する必要がある場合は、MD5指紋ハッシュ関数を使用するように指定する必要もあります。

ssh-keygen -E md5 -lf ~/.ssh/id_dsa.pub
2048 MD5:4d:5b:97:19:8c:fe:06:f0:29:e7:f5:96:77:cb:3c:71 (DSA)

また利用できる: -E sha1

更新...はい...はい...承知しています... SSHのDSAキーは使用しないでください。代わりに、古いRSAキーまたは新しい黄道キーを使用してください。

上記で使用したコマンドを編集し続ける「管理者」に。ITの変更をやめる!コマンドと結果の出力を不一致にします!


6
この回答で述べたよう、をssh使用してサーバーの古いMD5フィンガープリントを表示するように指示できることは、ここで言及する価値があります。(私はそれを探していましたが、この答えが私にそれを導いたので、他の人も同様の経験をしていると思います。)ssh -o FingerprintHash=md5 example.org
ジョナサンY.

25
この回答は、キーをgithub.comが示すもの(つまり、16進数でフォーマットされたMD5)と比較したい場合に最も役立ちます
hamx0r

2
また、どのパテをレポートするかと比較すると、非常に役立ちます。
pjcard 2017

27

Ubuntuでキーを表示するには、ターミナルで次のコマンドを入力します。

ssh-add -l

次のような出力が得られます: 2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23yourName @ ubuntu(RSA)

ただし、次のようなエラーが発生した場合。Could not open a connection to your authentication agent.
次に、ssh-agentが実行されていないことを意味します。あなたはそれを開始/実行することができます:( ssh-agent bashコメントの@Richardに感謝します)そして次に再実行することができますssh-add -l


5
Ubuntuを使用していない場合は、残念ながら「認証エージェントへの接続を開けませんでした」というメッセージが表示されることがあります。
rogerdpack 2013

1
これは、認証エージェントを実行している場合にのみ機能します。
Rufflewind 2014年

認証エージェントを実行するには、使用してssh-agent bash、処理を続行できます。いつものように。ssh-agentすべてのシステムでの一貫した実装として保証されていません。
Richard Kenneth Niescior 16年

Linuxに関するもう1つのヒント。ssh-keygen-g3のオプション-F(ダンプフィンガープリント)は、キーのフィンガープリントを表示します。$ ssh-keygen-g3 -F/path/ to
AnneTheAgile

18

鍵ペア(秘密鍵と公開鍵)は同じフィンガープリントを持ちます。したがって、どの秘密鍵がどの公開鍵に属しているかを思い出せない場合は、指紋を比較して一致を見つけます。

Marvin Vintoが最も投票した回答は、公開 SSHキーファイルのフィンガープリントを提供します。対応する秘密 SSH鍵のフィンガープリントも照会できますが、以下に示すように、より長い一連のステップが必要です。

  1. SSHエージェントをロードしていない場合はロードします。最も簡単な方法は、

    $ ssh-agent bash
    

    または

    $ ssh-agent tcsh
    

    (または使用する別のシェル)。

  2. テストする秘密鍵をロードします。

    $ ssh-add /path/to/your-ssh-private-key
    

    キーがパスワードで保護されている場合は、パスフレーズの入力を求められます。

  3. 今、他の人が言ったように、

    $ ssh-add -l
    1024 fd:bc:8a:81:58:8f:2c:78:86:a2:cf:02:40:7d:9d:3c you@yourhost (DSA)
    

    fd:bc:...あなたが求めている指紋です。複数のキーがある場合、複数の行が印刷され、最後の行には最後に読み込まれたキーのフィンガープリントが含まれます。

  4. エージェントを停止したい場合(つまり、上記のステップ1を呼び出した場合)、シェルで「exit」と入力するだけで、sshエージェントをロードする前にシェルに戻ります。

新しい情報は追加しませんが、この回答がすべてのレベルのユーザーに明確であることを願っています。


最初の段落は真実ではありません、ssh-add -lそしてssh-keygen -l与えられた鍵ペアのために、同じ指紋を返します。また、大文字-lではなく小文字にする必要があります。
Albertas Agejevas 2015

私はそれを争うしていないssh-add -lと、ssh-keygen -l与えられた鍵ペアのために同じ指紋を返します。しかし、私は最初の段落の元のステートメントの何が問題であったのか理解していません。明確にするために文を追加しました。
Wirawan Purwanto 2015

1
ssh-keygenをキーにポイントするのは、エージェントを起動してからキーをロードしてからフィンガープリントを取得するのと同じくらい簡単です。
Albertas Agejevas

1
秘密鍵のみを持っている場合、必ずしもを実行する必要はありませんssh-agentPRIVKEY秘密鍵ファイルにPUBKEY設定され、(最初は存在しない)公開鍵ファイルに設定されていると仮定して、次の操作を行いますssh-keygen -y -f "${PRIVKEY}" > "${PUBKEY}"。SSH公開鍵を再生成しssh-keygen -E md5 -l -v -f "${PUBKEY}"、MD5ハッシュが必要なssh-keygen -l -v -f "${PUBKEY}"場合、またはSHA-256ハッシュが必要な場合(現在、SHA-256がデフォルトです)。
David Tonhofer

12

キーがSSHエージェントにある場合の最速の方法:

$ ssh-add -L | ssh-keygen -E md5 -lf /dev/stdin

エージェントの各キーは次のように出力されます:

4096 MD5:8f:c9:dc:40:ec:9e:dc:65:74:f7:20:c1:29:d1:e8:5a /Users/cmcginty/.ssh/id_rsa (RSA)

3
私のキーをGitHubアカウントのキーと照合するためのより迅速な方法が必要でした。この回答は私がそれを行うのに役立ちました。
evanjs 2017

11

AWS フォーラムのコンテンツをここで再現します。これは、自分のユースケースに役立つことがわかったためです。AWSにインポートしたキーと一致するキーを確認したい

openssl pkey -in ~/.ssh/ec2/primary.pem -pubout -outform DER | openssl md5 -c

ここで:- primary.pemチェックする秘密鍵


9
$ ssh-add -l 

また、上で動作するのMac OS X v10.8(マウンテンライオン) - v10 SP1のを(ヨセミテ)。

また-E、フィンガープリント形式を指定するオプションもサポートしているため、MD5が必要な場合(GitHubなどでよく使用されます)、-E md5コマンドに追加するだけです。


最も単純な答えは+1です。man ssh-addオプションからは、-l「現在エージェントによって表されているすべてのIDのフィンガープリントを一覧表示」
XavierStuvw '16

8

Windowsでは、PuTTY / Pageantを実行しいる場合、PuTTY(.ppk)キーをPageantにロードすると、フィンガープリントがリストされます。どれを使用しているか忘れた場合に便利です。

ここに画像の説明を入力してください


3
ありがとうございます。Linuxの人々は、特にOPがパテについて述べたように、Windowsについて忘れることがあります。
Jmons 2017年

@ DmitriR117全世界に知られているのに、なぜ黒い公開鍵を塗ったのですか?
Michu93

8

これは、DigitalOceanドロップレットを作成するためのSSHキーのフィンガープリントを取得するために使用するシェル関数です。

fingerprint() {
    pubkeypath="$1"
    ssh-keygen -E md5 -lf "$pubkeypath" | awk '{ print $2 }' | cut -c 5-
}

それをに入れて調達する~/.bashrcと、次のように指紋を取得できます。

$ fingerprint ~/.ssh/id_rsa.pub
d2:47:0a:87:30:a0:c0:df:6b:42:19:55:b4:f3:09:b9

2

SSHエージェントが実行されている場合は、

ssh-add -l

すべてのIDのRSAフィンガープリントをリストする、または -Lため公開鍵をリストするため。

エージェントが実行されていない場合は、以下を試してください。

ssh-agent sh -c 'ssh-add; ssh-add -l'

そしてあなたの公開鍵について:

ssh-agent sh -c 'ssh-add; ssh-add -L'

メッセージが表示された場合: ' エージェントにはIDがありません。'、次に、ssh-keygen最初にRSAキーを生成する必要があります。


opensshをインストールしてから、puttyを使用してサーバーに接続しようとしました。ssh-ed25519 256キーフィンガープリントが表示されますが、「IDがありません」というメッセージが表示されます。このキーがどこにあり、リストされているか知っていますか?このキーを使用することと、新しいRSAキーを生成することの欠点はありますか?
lordcheeto 2018年

下で見つけた/etc/ssh/ssh_host_ed25519_key.pub。質問の2番目の部分は残ります:この自動生成されたキーを使用することの欠点
lordcheeto 2018年

1

場合によっては、~/.sshディレクトリに大量のキーがあり、GitHub / Gitlab / etcで表示されるフィンガープリントと一致するキーがわからないことがあります。

~/.sshディレクトリ内のすべてのキーのファイル名とMD5フィンガープリントを表示する方法は次のとおりです。

cd ~/.ssh
find . -type f -exec printf "\n{}\n" \; -exec ssh-keygen -E md5 -lf {} \;

(パラメーターの意味については、findコマンドに関するこの回答を参照しください。

1つのキーに属するプライベートファイルとパブリックファイルのフィンガープリントは同じであるため、重複していることに注意してください。


0

Google Compute Engineでは、Linuxインスタンスのシリアル出力にSSHホストキーのフィンガープリントが表示されます。APIはGCEからそのデータを取得でき、インスタンスにログインする必要はありません。

私はそれをシリアル出力からしか見つけられませんでした。指紋はもっとプログラマーに優しい場所にあるべきだと思います。

ただし、インスタンスの種類によって異なるようです。私はDebian 7(Wheezy)f1-microのインスタンスを使用しています。


-1

最初の接続の前にリモートSSHサーバーを確認するには、www.server-stats.net / ssh /を参照してください。を参照して、サーバーのすべてのSHHキーと、キーがわかっているときから確認します。

これはSSL証明書とは異なりますが、SSHサーバーに初めて接続する前に必ず行う必要があります。


4
ユーザーはサードパーティのウェブサイトではなく、OS自体からのコマンドラインを探していました。
Andrew Barber

つまり、SSLではなくSSHを除いて、基本的にはコンバージェンスプラグインであり、公証人は1つだけ(やや不明瞭)です。その音は正しいですか?
パルティアンショット

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.