Bash
OpenSSH

リモートサーバのauthorized_keysが持つ公開鍵のフィンガープリントを全て表示する

公開鍵は形式によってはとても長いので、目で見て同一かどうか判断するのが少々大変です。

OpenSSL には ssh-keygen コマンドで公開鍵の特徴とも言える フィンガープリント を表示してくれる機能があります。

ssh-keygen -l -f ~/id_rsa.pub

-l でフィンガープリント表示、-f で公開鍵ファイル名を指定します。

とはいえ authorized_keys ファイルは複数の(1行1個の)公開鍵が連結されており、その公開鍵一つ一つのフィンガープリントを表示するのはどうすればよいでしょう。

様々な方法が考えられますが、以下のような一発コマンドで行うのが手軽です。

for i in $(seq 1 $(wc -l ~/.ssh/authorized_keys | sed -e 's/^ *//' -e 's/ .*//') ) ; do
    ssh-keygen -l -f <(sed -n -e ${i}p ~/.ssh/authorized_keys)
done

for 文が in で取るリストは行数の行番号を取り、それに対して特定の ${i} 行のみを表示する sed 構文 ${i}p と、コマンドの出力結果を一時的にファイルのように扱える名前付きパイプ構文 <(...) を使用しています。