~/.ssh/allowed_keys [2] contiene la lista de claves públicas.
Desafortunadamente, cada clave pública no especifica la fuerza de la clave (número de bits).
¿Existe alguna utilidad que pueda procesar este archivo línea por línea y generar la fuerza de la clave?
Revisé las páginas de manual de ssh-keygen
, pero parece que solo funcionaría con claves privadas.
Además, ¿hay alguna herramienta que genere el hash sha1 de la misma manera que se muestra en la herramienta pageant
PuTTY?
El formato que estoy buscando:
Key Algorithm Strength Hash Comment
ssh-rsa 2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff [email protected]
ssh-rsa 2048 11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:11 [email protected]
ssh-keygen puede hacer el núcleo del trabajo (generar una huella digital a partir de una clave pública), pero no procesará automáticamente una lista de múltiples claves como suele encontrarse en un authorized_keys
expediente.
Aquí hay un script que divide las claves, las alimenta a ssh-keygen y produce la tabla que desea:
#!/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
Si tiene zsh, puede hacer esto como una sola línea:
while read line ; do ssh-keygen -lf =(echo $line); done < .ssh/authorized_keys
extrapolar de la solución zsh una solución bash
while read line ; do ssh-keygen -l -f <(echo $line); done < .ssh/authorized_keys
/ dev/fd/63 no es un archivo de clave pública.
/dev/fd/63 no es un archivo de clave pública.
casi ... Esto debería funcionar, pero a ssh-keygen parece no gustarle leer directamente desde el fd generado. Usando un archivo temporal para la redirección <(, entonces funciona. ¿Por qué?
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)
por supuesto, entonces puedes escribir esto más fácilmente y ser feliz
while read line
do
echo $line > /tmp/key
ssh-keygen -l -f /tmp/key
done < .ssh/authorized_keys
rm /tmp/key
Secuencia de comandos para enumerar todas las huellas dactilares del authorized_keys
archivo, creado por 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