it-swarm-es.tech

Dadas las claves en formato ~ / .ssh / allowed_keys, ¿puede determinar la fuerza de la clave fácilmente?

~/.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]
17

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
17
Chris Johnsen

Si tiene zsh, puede hacer esto como una sola línea:

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

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
4
Gunstick

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
3
saravana