Necesito configurar registros SSHFP en el DNS para mi host. He hecho algunas búsquedas pero no he encontrado ningún buen ejemplo.
- ¿Qué son los registros SSHFP?
- ¿Cómo son los registros SSHFP?
- ¿Cómo creo registros SSHFP?
Necesito configurar registros SSHFP en el DNS para mi host. He hecho algunas búsquedas pero no he encontrado ningún buen ejemplo.
Respuestas:
Los registros RR SSHFP son registros DNS que contienen huellas digitales para 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.
Los registros SSHFP constan de tres cosas:
Hay cuatro algoritmos diferentes definidos en SSHFP a partir de 2015 . Cada algoritmo está representado por un número entero. Los algoritmos son:
Dos tipos de huellas digitales se definen en SSHFP a partir de 2012 . Cada tipo de huella digital está representado por un número entero. Estos son:
Puede usar ssh-keygen
para generar los registros usando el -r
parámetro, seguido del nombre de host (que no afecta las huellas digitales para que pueda especificar lo que quiera)
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
A veces se ssh-keygen
le pedirá la ubicación del certificado público. Si se le solicita, deberá ejecutar 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
.
La autenticación basada en DNS de entidades nombradas (DANE) ( RFC 6698 ) es un posible sucesor de SSHFP RR. DANE es muy similar a SSHFP RR pero no se limita a SSH. Utiliza TLSA RR en su lugar con un formato muy similar.
No estoy seguro si ssh-keygen
funciona con claves existentes. Si no, aún puede ensamblarlos fácilmente en su shell (que prefiero), y sin sofisticados softwares o interfaces remotas.
A registros como los mencionados ...
my.domain.com IN SSHFP 2 1 72d30d211ce8c464de2811e534de23b9be9b4dc4
... existen 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"
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, VerifyHostKeyDNS ask
ingrese la configuración de su cliente SSH, por lo general ~/.ssh/config
.
ssh-keygen -r
no generar registros SSHFP para llaves existentes a pesar del hecho de que el nombre del comando indica que es sólo para la generación.
Las versiones anteriores de ssh-keygen no generan todas las claves disponibles (por ejemplo, no hay soporte para 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 ' ')"
;;
esac
done
Editar: Nueva versión con PR de alex-dupuy con * soporte BSD.
Si usa Puppet, facter
ha incorporado soporte para sshfp
. Además, si está utilizando 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
Así es como obtengo mis registros SSHFP a través de Ansible :
- name: Capture the SSHFP entries
shell: "ssh-keygen -r {{ ansible_nodename }}|awk '{print $4, $5, $6}'"
register: sshfp_entries
ssh-keygen -r
también maneja registros de tipo ed25519 (usando el número experimental 4 de iana iana.org/assignments/dns-sshfp-rr-parameters/… )