Comment générer des enregistrements SSHFP?

39

Je dois configurer les enregistrements SSHFP dans le DNS pour mon hôte. J'ai fait des recherches mais je n'ai trouvé aucun bon exemple.

  • Que sont les enregistrements SSHFP?
  • À quoi ressemblent les enregistrements du PSSPS?
  • Comment créer des enregistrements SSHFP?
Mikael Dúi Bolinder
la source

Réponses:

49

Que sont les enregistrements SSHFP?

Les enregistrements RR SSHFP sont des enregistrements DNS contenant des empreintes digitales pour les clés publiques utilisées pour SSH. Ils sont principalement utilisés avec les domaines activés par DNSSEC. Lorsqu'un client SSH se connecte à un serveur, il vérifie l'enregistrement SSHFP correspondant. Si les empreintes digitales des enregistrements correspondent aux serveurs, celui-ci est légitime et la connexion en toute sécurité.

À quoi ressemblent les enregistrements du PSSPS?

Les dossiers du PSSPS comportent trois éléments:

  1. Algorithme
  2. Type d'empreinte digitale
  3. Empreinte digitale (en hex)

Algorithme

Il y a quatre algorithmes différents définis dans SSHFP à partir de 2015 . Chaque algorithme est représenté par un entier. Les algorithmes sont:

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

Type d'empreinte digitale

Deux types d'empreintes digitales sont définis dans SSHFP à partir de 2012 . Chaque type d'empreinte digitale est représenté par un entier. Ceux-ci sont:

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

Comment générer des enregistrements SSHFP?

Vous pouvez utiliser ssh-keygenpour générer les enregistrements à l'aide du -rparamètre, suivi du nom d'hôte (qui n'affecte pas les empreintes digitales, vous pouvez donc spécifier ce que vous voulez).

Exemple

Utiliser ssh-keygenet 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

Remarque

Parfois ssh-keygen, demandera l'emplacement du certificat public. Si cela vous est demandé, vous devrez exécuter ssh-keygenplusieurs fois et spécifier à chaque fois un certificat différent pour vous assurer de générer tous les enregistrements SSHFP nécessaires. Vos clés publiques sont généralement situées dans /etc/ssh.


Authentification d'entités nommées basée sur DNS

L'authentification des entités nommées (DANE) basée sur le DNS ( RFC 6698 ) est un successeur potentiel du RR SSHFP. DANE est très similaire au SSHFP RR mais ne se limite pas à SSH. Il utilise TLSA RR à la place avec un format très similaire.

Mikael Dúi Bolinder
la source
ssh-keygen -rgère également les enregistrements de type ed25519 (en utilisant le numéro expérimental 4 de iana iana iana.org/assignments/dns-sshfp-rr-parameters/… )
Brian Minton, le
3
Le serveur est légitime ou le serveur DNS est compromis.
Michael Mior
7

Je ne sais pas si ssh-keygenfonctionne avec les clés existantes. Sinon, vous pouvez toujours les assembler facilement dans votre shell (ce que je préfère) et sans logiciel sophistiqué ni interface distante.

Un disque tel que mentionné ...

my.domain.com IN SSHFP 2 1 72d30d211ce8c464de2811e534de23b9be9b4dc4

... existe de 6 parties:

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

Pour l'utiliser, insérez- VerifyHostKeyDNS askvous généralement dans la configuration de votre client SSH ~/.ssh/config.

Leo
la source
5
Pour mémoire, ssh-keygen -r ne générer des enregistrements SSHFP pour les clés existantes en dépit du fait que le nom de la commande donne à penser qu'il est seulement pour GÉNÉRER.
Celada
5

Les anciennes versions de ssh-keygen ne génèrent pas toutes les clés disponibles (par exemple, aucun support pour ecdsa et sha256). Ce script crée tous les enregistrements pour toutes les clés disponibles dans /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: Nouvelle version avec PR de alex-dupuy avec support * BSD.

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

utilisateur4814732
la source
3

Si vous utilisez Puppet, factera construit dans le support pour sshfp. De plus, si vous utilisez PuppetDB, vous pouvez facilement extraire cette information pour tous vos hôtes.

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

La source

Drew Michel
la source
3

Voici comment obtenir mes enregistrements de PSSPS via Ansible :

- name: Capture the SSHFP entries
  shell: "ssh-keygen -r {{ ansible_nodename }}|awk '{print $4, $5, $6}'"
  register: sshfp_entries
Mike Schroll
la source