SSHFP kayıtlarını nasıl oluştururum?


39

Ana bilgisayarım için DNS’de SSHFP kayıtları kurmam gerekiyor. Bazı araştırmalar yaptım ama iyi bir örnek bulamadım.

  • SSHFP kayıtları nedir?
  • SSHFP kayıtları neye benziyor?
  • SSHFP kayıtlarını nasıl oluşturabilirim?

Yanıtlar:


49

SSHFP kayıtları nedir?

SSHFP RR kayıtları, SSH için kullanılan ortak anahtarlar için parmak izi içeren DNS kayıtlarıdır. Genellikle DNSSEC etkin alan adları ile kullanılırlar. Bir SSH istemcisi bir sunucuya bağlandığında ilgili SSHFP kaydını kontrol eder. Kayıt parmak izi sunucularla eşleşiyorsa, sunucu okunaklıdır ve bağlanmak güvenlidir.

SSHFP kayıtları neye benziyor?

SSHFP kayıtları üç şeyden oluşur:

  1. Algoritma
  2. Parmak izi tipi
  3. Parmak izi (onaltılı)

Algoritma

2015 yılı itibariyle SSHFP'de tanımlanan dört farklı algoritma vardır . Her algoritma bir tamsayı ile temsil edilir. Algoritmalar:

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

Parmak izi tipi

2012 itibariyle SSHFP'de iki parmak izi türü tanımlanmıştır . Her parmak izi türü bir tam sayı ile gösterilir. Bunlar:

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

SSHFP kayıtlarını nasıl oluştururum?

Parametreyi ssh-keygenkullanarak kayıtları oluşturmak için kullanabilirsiniz -r, ardından ana bilgisayar adı (bunun yerine parmak izlerini etkilemez, böylece ne istersen belirleyebilirsiniz)

Örnek

Kullanımı ssh-keygenve 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

Not

Bazen ssh-keygengenel sertifikanın yerini isteyecektir. ssh-keygenSorarsa, birden çok kez çalıştırmanız gerekecek ve her zaman gerekli tüm SSHFP kayıtlarını oluşturduğunuzdan emin olmak için farklı bir sertifika belirtmelisiniz. Genel anahtarlarınız genellikle içinde bulunur /etc/ssh.


Adlandırılmış Varlıkların DNS Tabanlı Kimlik Doğrulaması

Adlandırılmış Kuruluşların DNS Tabanlı Kimlik Doğrulaması (DANE) ( RFC 6698 ), SSHFP RR için potansiyel bir halefidir. DANE, SSHFP RR'ye çok benzer, ancak SSH ile sınırlı değildir. Çok benzer bir formatta yerine TLSA RR kullanır.


ssh-keygen -rAyrıca (IANA'da deneysel numarayı 4 kullanılarak ed25519 tip kayıtları kolları iana.org/assignments/dns-sshfp-rr-parameters/... )
Brian Minton

3
Sunucu okunaklı veya DNS sunucusu tehlikede.
Michael Mior,

7

ssh-keygenMevcut anahtarlarla çalışıp çalışmadığından emin değilim . Değilse, yine de onları kabuğunuzda (ki tercih ederim) ve fantezi yazılım veya uzak arayüzler olmadan kolayca monte edebilirsiniz.

Belirtildiği gibi bir kayıtlar ...

my.domain.com IN SSHFP 2 1 72d30d211ce8c464de2811e534de23b9be9b4dc4

... 6 bölümden oluşur:

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

Bunu kullanmak VerifyHostKeyDNS askiçin, genellikle SSH istemcinizin config komutunu kullanın ~/.ssh/config.


5
Kayıt için, ssh-keygen -r yok komut adı o üretmek için sadece var anlaşılacağı olmasına rağmen mevcut anahtarlar için SSHFP kayıtlarını oluşturur.
Celada,

5

Eski ssh-keygen sürümleri mevcut tüm anahtarları üretmez (örneğin, ecdsa ve sha256 desteği yoktur). Bu komut dosyası, mevcut tüm anahtarlar için tüm kayıtları oluşturur /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

Düzenleme: alex-dupuy PR ile * Yeni Sürüm * BSD desteği ile.

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


3

Kukla kullanıyorsanız, facterdestek için inşa etti sshfp. Ayrıca PuppetDB kullanıyorsanız, bu bilgiyi tüm ev sahipleriniz için kolayca çıkarabilirsiniz.

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

Kaynak


3

SSHFP kayıtlarımı Ansible ile şu şekilde alıyorum :

- name: Capture the SSHFP entries
  shell: "ssh-keygen -r {{ ansible_nodename }}|awk '{print $4, $5, $6}'"
  register: sshfp_entries
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.