~/.ssh/authorized_keys 形式のキーが与えられると、キーの強度を簡単に確認できますか?

~/.ssh/authorized_keys 形式のキーが与えられると、キーの強度を簡単に確認できますか?

~/.ssh/authorized_keys[2] には公開鍵のリストが含まれています。

残念ながら、各公開鍵には鍵強度(ビット数)が指定されていません。

このファイルを1行ずつ処理してキー強度を出力するユーティリティはありますか?

マニュアルページを確認しましたが、秘密ssh-keygen鍵としてのみ機能しているようです。

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

答え1

SSHキージェネレータタスクの中核は完了しましたが(公開鍵から指紋を生成します)、通常、ファイルに見られるように、複数の鍵のリストを自動的に処理するわけではありませんauthorized_keys

以下は、キーを分割してキーを供給するスクリプトです。SSHキージェネレータ目的のテーブルを作成します。

#!/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

答え2

ssh-keygenopenssh-7.2(少なくともFedoraとUbuntu Xenialでは)は、単一のファイルから複数のキーを読み取る機能をサポートしています。だから簡単に実行してください。

# ssh-keygen -l -f ~/.ssh/authorized_keys
2048 SHA256:xh0IVbI... jakuje@jakuje (RSA)
2048 SHA256:xh0IVbI... jakuje@jakuje (RSA)

希望の出力を生成します。

答え3

zshがあれば、単に次のことができます。

while read line ; do ssh-keygen -lf =(echo $line); done < .ssh/authorized_keys

答え4

authorized_keyssaravanaによって生成されたファイルのすべての指紋を一覧表示するスクリプト:

#!/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

関連情報