~/.ssh/authorized_keys[2] 包含公钥列表。
不幸的是,每个公钥都没有指定密钥强度(位数)。
是否有一个实用程序可以逐行处理这个文件并输出密钥强度?
我检查了 的手册页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-keygen
在 openssh-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_keys
,由 saravana 创建:
#!/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