
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:
- Algoritmo de clave pública
- tipo de huella digital
- 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 -r
pará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 -D
parámetro, seguido del nombre de host.
Ejemplo
Usando ssh-keygen
y 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-keygen
solicitarán la ubicación del certificado público. Si se lo solicita, tendrá que ejecutarlo ssh-keygen
varias 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-keygen
funciona 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 ask
la 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.
Respuesta4
Si usa Puppet, facter
tiene 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