Como eu gero registros SSHFP?

33

Eu preciso configurar os registros do 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 do SSHFP?
  • Como faço para criar registros SSHFP?
por Mikael Dúi Bolinder 28.03.2014 / 01:14

5 respostas

44

O que são registros SSHFP?

Os registros SSHFP RR são registros DNS que contêm impressões digitais para 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.

Como são os registros do SSHFP?

Os registros do SSHFP consistem em três coisas:

  1. Algoritmo
  2. Tipo de impressão digital
  3. Impressão digital (em hexadecimal)

Algoritmo

Existem quatro algoritmos diferentes definidos no SSHFP a partir de 2015 . Cada algoritmo é representado por um inteiro. Os algoritmos são:

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

Tipo de impressão digital

Dois tipos de impressão digital são definidos no SSHFP a partir de 2012 . Cada tipo de impressão digital é representado por um inteiro. Estes são:

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

Como eu gero registros SSHFP?

Você pode usar ssh-keygen para gerar os registros usando o parâmetro -r , seguido pelo nome do host (que não afeta as impressões digitais para que você possa especificar o que quiser)

Exemplo

Usando ssh-keygen e o CentOS 6 :

[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

Às vezes, ssh-keygen pedirá a localização do certificado público. Se ele perguntar, você terá que executar ssh-keygen várias vezes e sempre especificar um certificado diferente para garantir a geração de todos os registros necessários do SSHFP. Suas chaves públicas geralmente estão localizadas em /etc/ssh .

    
por 28.03.2014 / 01:14
7

Não tenho certeza se ssh-keygen funciona com chaves existentes. Se não, você ainda pode montá-los facilmente em seu shell (o que eu prefiro), e sem software sofisticado ou interfaces remotas.

Registros como os mencionados ...

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 fazer uso, coloque VerifyHostKeyDNS ask na configuração do seu cliente SSH, geralmente ~/.ssh/config .

    
por 01.06.2014 / 18:46
5

As versões mais antigas 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

Editar: Nova versão com PR de alex-dupuy com suporte a * BSD.

link

    
por 15.11.2014 / 17:05
3

Se você usar o Puppet, o facter terá suporte 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

Fonte

    
por 30.06.2014 / 04:01
2

É assim que recebo meus registros do SSHFP por meio de Ansible :

- name: Capture the SSHFP entries
  shell: "ssh-keygen -r {{ ansible_nodename }}|awk '{print $4, $5, $6}'"
  register: sshfp_entries
    
por 26.11.2017 / 05:28

Tags