〜/ .ssh/authorized_keys [2]には公開鍵のリストが含まれています。
残念ながら、各公開鍵は鍵の強度(ビット数)を指定していません。
このファイルを1行ずつ処理してキー強度を出力できるユーティリティはありますか?
ssh-keygen
のmanページを確認しましたが、秘密鍵でしか機能しないようです。
また、pageant
PuTTYツールで表示されるのと同じ方法でsha1ハッシュを出力するツールはありますか?
私が探しているフォーマット:
Key Algorithm Strength Hash Comment
ssh-rsa 2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff user1@Host1
ssh-rsa 2048 11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:11 user2@Host2
ssh-keygenは作業のコア(公開鍵からのフィンガープリントの生成)を実行できますが、authorized_keys
ファイルで通常見られるような複数の鍵のリストを自動的に処理しません。
以下は、キーを分割し、それらをssh-keygenにフィードして、必要なテーブルを作成するスクリプトです。
#!/bin/sh
# usage: authkeys-report <authorized_keys-file>
set -ue
tmp="$(mktemp -t fingerprint-authkeys.XXXXXXXX)"
trap 'rm -f "$tmp"' 0
while read opts key; do
case "$opts" in
[0-9]*|ssh-dss|ssh-rsa)
# not options, first "Word" is part of key
key="$opts $key"
;;
esac
echo "$key" >$tmp
set -- $(ssh-keygen -lf "$tmp")
bits="$1" fingerprint="$2"
set -- $key # Note: will mangle whitespace in the comment
case "$1" in
[0-9]*) # SSH v1 key
type=rsa1
shift 3
;;
ssh-rsa|ssh-dss) # SSH v2 key
type="$1"
shift 2
;;
*)
type=unknown
set --
;;
esac
printf '%-14s %-9s %s %s\n' "$type" "$bits" "$fingerprint" "$*"
done <$1
ssh-keygen
openssh-7.2(現在は少なくともFedoraおよびUbuntu Xenial)では、1つのファイルから複数のキーを読み取ることができます。したがって、単純に実行
# ssh-keygen -l -f ~/.ssh/authorized_keys
2048 SHA256:xh0IVbI... jakuje@jakuje (RSA)
2048 SHA256:xh0IVbI... jakuje@jakuje (RSA)
結果は望ましい出力になります。
Zshを使用している場合は、これをワンライナーとして実行できます。
while read line ; do ssh-keygen -lf =(echo $line); done < .ssh/authorized_keys
zshソリューションからbashソリューションを推定する
while read line ; do ssh-keygen -l -f <(echo $line); done < .ssh/authorized_keys
/ dev/fd/63は公開鍵ファイルではありません。
/dev/fd/63は公開鍵ファイルではありません。
ほとんど...これはうまくいくはずですが、ssh-keygenは生成されたfdから直接読み取るのが好きではないようです。 <(リダイレクトに一時ファイルを使用すると、機能します。なぜですか?
while read line
do
cat > /tmp/key <(echo $line)
ssh-keygen -l -f /tmp/key
done < .ssh/authorized_keys
1024 1f:c7:da:ef:ff:ff:ff:ff:c8:77:c6:f8:1f:dd:f3:1a/tmp/key(RSA)
3072 83:cd:af:b4:ff:ff:ff:ff:02:30:e7:1e:47:ed:c5:69/tmp/key(RSA)
もちろん、あなたはもっと簡単にこれを書いて幸せになることができます
while read line
do
echo $line > /tmp/key
ssh-keygen -l -f /tmp/key
done < .ssh/authorized_keys
rm /tmp/key
Saravanaによって作成されたauthorized_keys
ファイルからすべての指紋をリストするスクリプト:
#!/usr/bin/ksh
USER=`whoami`
USER_H=` lsuser -a home $USER |awk -F '=' '{print $2}'`
cat $USER_H/.ssh/authorized_keys| while read line
do
echo $line > /tmp/finger_print
echo "************* Key,finger print details below ***************************"
cat /tmp/finger_print
echo
ssh-keygen -l -f /tmp/finger_print|grep -v not|awk '{print $1" " $2 " " $4}'
if ssh-keygen -l -f /tmp/finger_print|grep "is not a" > /dev/null 2>&1
then
echo "The above key is an Invalid Key,Please correct it"
fi
echo "========================================================================"
rm /tmp/finger_print
done