Preciso configurar registros SSHFP no DNS do meu host. Eu fiz algumas pesquisas, mas não encontrei nenhum bom exemplo.
- O que são registros SSHFP?
- Como são os registros SSHFP?
- Como crio registros SSHFP?
Preciso configurar registros SSHFP no DNS do meu host. Eu fiz algumas pesquisas, mas não encontrei nenhum bom exemplo.
Respostas:
Os registros SSHFP RR são registros DNS que contêm impressões digitais de chaves públicas usadas para SSH. Eles são usados principalmente com domínios habilitados para DNSSEC. Quando um cliente SSH se conecta a um servidor, ele verifica o registro SSHFP correspondente. Se a impressão digital dos registros corresponder aos servidores, o servidor é legítimo e é seguro conectar-se.
Os registros SSHFP consistem em três coisas:
Existem quatro algoritmos diferentes definidos no SSHFP a partir de 2015 . Cada algoritmo é representado por um número inteiro. Os algoritmos são:
Dois tipos de impressão digital são definidos no SSHFP a partir de 2012 . Cada tipo de impressão digital é representado por um número inteiro. Esses são:
Você pode usar ssh-keygen
para gerar os registros usando o -r
parâmetro, seguido pelo nome do host (que não afeta as impressões digitais, para que você possa especificar o que quiser)
Usando ssh-keygen
e 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
Às vezes ssh-keygen
, solicita a localização do certificado público. Se solicitado, você precisará executar ssh-keygen
várias vezes e sempre especificar um certificado diferente para garantir que você gere todos os registros SSHFP necessários. Suas chaves públicas geralmente estão localizadas em /etc/ssh
.
A autenticação de entidades nomeadas (DANE) baseada em DNS ( RFC 6698 ) é um sucessor em potencial do SSHFP RR. O DANE é muito semelhante ao SSHFP RR, mas não está limitado ao SSH. Ele usa TLSA RR em vez disso com um formato muito semelhante.
Não tenho certeza se ssh-keygen
funciona com chaves existentes. Caso contrário, você ainda pode montá-los facilmente em seu shell (o que eu prefiro) e sem software sofisticado ou interfaces remotas.
A registros como mencionado ...
my.domain.com IN SSHFP 2 1 72d30d211ce8c464de2811e534de23b9be9b4dc4
... existem 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 usá-lo, coloque VerifyHostKeyDNS ask
na configuração do seu cliente SSH, normalmente ~/.ssh/config
.
ssh-keygen -r
não geram registros SSHFP para as chaves existentes, apesar do fato de que o nome do comando sugere que seja apenas para a geração.
As versões anteriores do ssh-keygen não geram todas as chaves disponíveis (por exemplo, sem suporte para ecdsa e sha256). Este script cria todos os registros para todas as chaves disponíveis em /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
Edit: Nova versão com PR de alex-dupuy com suporte * BSD.
Se você usa o Puppet, facter
tem suporte embutido para sshfp
. Além disso, se você estiver usando o PuppetDB, poderá extrair facilmente essas informações para todos os seus 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
ssh-keygen -r
também lida com ed25519 registos tipo (utilizando o número experimental 4 de iana iana.org/assignments/dns-sshfp-rr-parameters/... )