web-dev-qa-db-fra.com

Comment générer des enregistrements SSHFP?

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

  • Quels sont les enregistrements SSHFP?
  • À quoi ressemble SSHFP Documents?
  • Comment créer des enregistrements SSHFP?
43

Quels sont les enregistrements SSHFP?

Les enregistrements 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 compatibles DNSSEC. Lorsqu'un client SSH se connecte à un serveur, il vérifie l'enregistrement SSHFP correspondant. Si l'empreinte digitale correspond aux serveurs, le serveur est légitime et il est prudent de se connecter.

À quoi ressemble SSHFP Documents?

Les enregistrements SSHFP comprennent trois choses:

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

Algorithme

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

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

Type d'empreintes digitales

Deux types d'empreintes digitales sont définis dans SSHFP à compter 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-keygen Pour générer les enregistrements à l'aide de -r Paramètre, suivi du nom d'hôte (qui n'affecte pas les empreintes digitales afin que vous puissiez spécifier ce que vous préférez à la place)

Exemple

À l'aide de ssh-keygen et 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

Noter

Parfois ssh-keygen demandera l'emplacement du certificat public. Si cela le demande, vous devrez courir ssh-keygen Plusieurs fois et chaque fois Spécifiez 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 basée sur DNS des entités nommées

authentification basée sur DNS des entités nommées (Dane) ( RFC 6698 ) est un successeur potentiel de SSHFP RR. Dane est très similaire à SSHFP RR mais n'est pas limité à SSH. Il utilise TLSA RR au lieu d'un format très similaire.

52

Je ne suis pas sûr si ssh-keygen fonctionne avec les clés existantes. Sinon, vous ne pouvez toujours pas les assembler facilement dans votre coquille (que je préfère) et sans logiciel de fantaisie ou interfaces distantes.

Un enregistrement tel que mentionné ...

my.domain.com IN SSHFP 2 1 72d30d211ce8c464de2811e534de23b9be9b4dc4

... existent 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 en utiliser, mettez VerifyHostKeyDNS ask Dans votre configuration de votre client SSH, généralement ~/.ssh/config.

8
Leo

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 de 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

Modifier: nouvelle version avec PR d'Alex-Dupuy avec * BSD Support.

https://github.com/minindfucku/scripts/blob/master/sshfpgen

5
user4814732

Voici comment je reçois mes disques SSHFP à travers ansibles :

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

Si vous utilisez la marionnette, facter a pris en charge le support sshfp. De plus, si vous utilisez PUPPETDB, vous pouvez facilement extraire ces informations 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

source

3
Drew Michel