¿Cómo genero registros SSHFP?

¿Cómo genero registros SSHFP?

Necesito configurar registros SSHFP en el DNS de mi host. He buscado un poco pero no he encontrado ningún buen ejemplo.

  • ¿Qué son los registros SSHFP?
  • ¿Cómo se ven los registros SSHFP?
  • ¿Cómo creo registros SSHFP?

Respuesta1

¿Qué son los registros SSHFP?

Los registros SSHFP son registros DNS que contienen huellas digitales de claves públicas utilizadas para SSH. Se utilizan principalmente con dominios habilitados para DNSSEC. Cuando un cliente SSH se conecta a un servidor, verifica el registro SSHFP correspondiente. Si la huella digital de los registros coincide con los servidores, el servidor es legítimo y es seguro conectarse.

¿Cómo se ven los registros SSHFP?

Los registros SSHFP constan de tres cosas:

  1. Algoritmo de clave pública
  2. tipo de huella digital
  3. Huella digital (en hexadecimal)

Algoritmo de clave pública

Hay cinco algoritmos diferentes definidos en SSHFPa partir de 2021. Cada algoritmo está representado por un número entero.Los algoritmos son:

  • 1-RSA
  • 2-DSA
  • 3 - ECDSA
  • 4 - Ed25519
  • 6 - Ed448

tipo de huella digital

Se definen dos tipos de huellas dactilares en SSHFPa partir de 2012. Cada tipo de huella digital está representado por un número entero.Estos son:

  • 1-SHA-1
  • 2-SHA-256

¿Cómo genero registros SSHFP?

Puedes usarssh-keygenlocalmente para generar los registros usando el -rparámetro, seguido del nombre de host (que no afecta las huellas digitales, por lo que puede especificar lo que quiera).

Puede usar ssh-keyscan para generar registros para un servidor remoto usando el -Dparámetro, seguido del nombre de host.

Ejemplo

Usando ssh-keygeny CentOS:

[root@localhost ~]# ssh-keygen -r my.domain.com
my.domain.com IN SSHFP 1 1 450c7d19d5da9a3a5b7c19992d1fbde15d8dad34
my.domain.com IN SSHFP 2 1 72d30d211ce8c464de2811e534de23b9be9b4dc4

Nota

En ocasiones ssh-keygensolicitarán la ubicación del certificado público. Si se lo solicita, tendrá que ejecutarlo ssh-keygenvarias veces y cada vez especificar un certificado diferente para asegurarse de generar todos los registros SSHFP necesarios. Sus claves públicas generalmente se encuentran en /etc/ssh.

Respuesta2

No estoy seguro si ssh-keygenfunciona con claves existentes. Si no, aún puedes ensamblarlos fácilmente en tu shell (que prefiero) y sin software sofisticado ni interfaces remotas.

Un registro como el mencionado...

my.domain.com IN SSHFP 2 1 72d30d211ce8c464de2811e534de23b9be9b4dc4

...existe de 6 partes:

part 1: hostname
part 2: Usually "IN" for internet
part 3: "SSHFP", the RR name for type 44
part 4: RSA keys     = "1"
        DSA keys     = "2"
        ECDSA keys   = "3"
        Ed25519 keys = "4"
        Ed448 keys   = "6"
part 5: The algorithm type:
        SHA-1        = "1"
        SHA-256      = "2"
part 6: You can generate, for example:

        $ awk '{print $2}' /etc/ssh/ssh_host_dsa_key.pub | \
            openssl base64 -d -A | openssl sha1

Para usarlo, ingrese VerifyHostKeyDNS askla configuración de su cliente SSH, generalmente ~/.ssh/config.

Respuesta3

Las versiones anteriores de ssh-keygen no generan todas las claves disponibles (por ejemplo, no son compatibles con ecdsa y sha256). Este script crea todos los registros para todas las claves disponibles en /etc/ssh/:

#!/bin/bash
#
# Creates SSHFP Records for all available keys
#

HOST="${1-$(hostname -f)}"

if [[ "$1" == "-h" || "$1" == "--help" ]]
then
  echo "Usage: sshfpgen <hostname>"
fi

if which openssl >/dev/null 2>&1
then
  if ! which sha1sum >/dev/null 2>&1
  then
    sha1sum() {
      openssl dgst -sha1 | grep -E -o "[0-9a-f]{40}"
    }
  fi
  if ! which sha256sum >/dev/null 2>&1
  then
    sha256sum() {
      openssl dgst -sha256 | grep -E -o "[0-9a-f]{64}"
    }
  fi
fi

for pubkey in /etc/ssh/ssh_host_*_key.pub /etc/ssh_host_*_key.pub
do
  case "$(cut -d _ -f3 <<< "$pubkey")"
  in
    rsa)
      echo "$HOST IN SSHFP 1 1 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha1sum  | cut -f 1 -d ' ')"
      echo "$HOST IN SSHFP 1 2 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha256sum  | cut -f 1 -d ' ')"
    ;;
    dsa)
      echo "$HOST IN SSHFP 2 1 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha1sum  | cut -f 1 -d ' ')"
      echo "$HOST IN SSHFP 2 2 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha256sum  | cut -f 1 -d ' ')"
    ;;
    ecdsa)
      echo "$HOST IN SSHFP 3 1 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha1sum  | cut -f 1 -d ' ')"
      echo "$HOST IN SSHFP 3 2 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha256sum  | cut -f 1 -d ' ')"
    ;;
    ed25519)
      echo "$HOST IN SSHFP 4 1 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha1sum  | cut -f 1 -d ' ')"
      echo "$HOST IN SSHFP 4 2 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha256sum  | cut -f 1 -d ' ')"
    ;;
    ed448)
      echo "$HOST IN SSHFP 6 1 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha1sum  | cut -f 1 -d ' ')"
      echo "$HOST IN SSHFP 6 2 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha256sum  | cut -f 1 -d ' ')"
    ;;
  esac
done

Editar: Nueva versión con relaciones públicas de alex-dupuy con soporte *BSD.

https://github.com/mindfuckup/Scripts/blob/master/sshfpgen

Respuesta4

Si usa Puppet, factertiene soporte integrado parasshfp. Además, si utiliza PuppetDB, puede extraer fácilmente esta información para todos sus hosts.

facter | grep -i sshfp
  sshfp_dsa => SSHFP 2 1 e1a3e639d6dbd48d3964ebfb772d2d11f1065682
  SSHFP 2 2 4f620ce2bc97d91ae5eff42fba621d65b677ab725f275f56b2abd1303c142b73
  sshfp_rsa => SSHFP 1 1 a78351af371faf3f19533c3a4a9e967543d7d2f5
  SSHFP 1 2 795943a6ee8b53c818cfef5781209e25a6eb4bc386813db60d3ff2c1569692fc

información relacionada