SSHFPレコードを生成するにはどうすればよいですか?


39

ホストのDNSにSSHFPレコードを設定する必要があります。いくつかの検索を行いましたが、良い例は見つかりませんでした。

  • SSHFPレコードとは何ですか?
  • SSHFPレコードはどのように見えますか?
  • SSHFPレコードを作成するにはどうすればよいですか?

回答:


49

SSHFPレコードとは何ですか?

SSHFP RRレコードは、SSHに使用される公開キーのフィンガープリントを含むDNSレコードです。DNSSEC対応ドメインで主に使用されます。SSHクライアントがサーバーに接続すると、対応するSSHFPレコードを確認します。レコードの指紋がサーバーと一致する場合、サーバーは正当であり、接続しても安全です。

SSHFPレコードはどのように見えますか?

SSHFPレコードは、次の3つの要素で構成されています。

  1. アルゴリズム
  2. 指紋タイプ
  3. 指紋(16進数)

アルゴリズム

2015年現在、SSHFPには4つの異なるアルゴリズムが定義されています。各アルゴリズムは整数で表されます。アルゴリズムは次のとおりです。

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

指紋タイプ

SSHFP では、2012年の時点で 2つの指紋タイプが定義されています。各指紋タイプは整数で表されます。これらは:

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

SSHFPレコードを生成するにはどうすればよいですか?

パラメータssh-keygenを使用してレコードを生成し-r、その後にホスト名を続けて使用することができます(これは指紋に影響しないため、代わりに好きなものを指定できます)。

ssh-keygenCentOSの使用:

[root@localhost ~]# ssh-keygen -r my.domain.com
my.domain.com IN SSHFP 1 1 450c7d19d5da9a3a5b7c19992d1fbde15d8dad34
my.domain.com IN SSHFP 2 1 72d30d211ce8c464de2811e534de23b9be9b4dc4

注意

時々ssh-keygen、公開証明書の場所を尋ねられます。要求された場合、ssh-keygen複数回実行する必要があり、毎回異なる証明書を指定して、必要なすべてのSSHFPレコードを生成するようにします。通常、公開鍵はにあり/etc/sshます。


名前付きエンティティのDNSベースの認証

DNSベースの名前付きエンティティの認証(DANE)( RFC 6698)は、SSHFP RRの後継候補です。DANEはSSHFP RRに非常に似ていますが、SSHに限定されません。代わりに、非常によく似た形式の TLSA RRを使用します。


ssh-keygen -rまた、(IANAから実験番号4を使用してed25519タイプレコードを扱うiana.org/assignments/dns-sshfp-rr-parameters/...
ブライアン・ミントン

3
サーバーが正当である、DNSサーバーが侵害されています。
マイケルミオール

7

ssh-keygen既存のキーで動作するかどうかはわかりません。そうでない場合でも、シェルで簡単にアセンブルできます(これは好みです)。

上記のような記録...

my.domain.com IN SSHFP 2 1 72d30d211ce8c464de2811e534de23b9be9b4dc4

... 6つの部分があります:

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

それを利用するにはVerifyHostKeyDNS ask、通常、SSHクライアントの設定を入れます~/.ssh/config


5
記録のために、ssh-keygen -r ないコマンドの名前は、それが発生するためだけだ示唆しているという事実にもかかわらず、既存のキーのためのSSHFPレコードを生成します。
セラダ14

5

ssh-keygenの古いバージョンは、利用可能なすべてのキーを生成しません(ecdsaおよびsha256のサポートなしなど)。このスクリプトは、以下のすべての使用可能なキーのすべてのレコードを作成します/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

編集:* BSDサポート付きのalex-dupuyからのPR付きの新しいバージョン。

https://github.com/mindfuckup/Scr​​ipts/blob/master/sshfpgen


3

Puppetを使用する場合facter、のサポートが組み込まれていsshfpます。さらに、PuppetDBを使用している場合は、すべてのホストについてこの情報を簡単に抽出できます。

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

ソース


3

これは私がAnsibleを通してSSHFPレコードを取得する方法です:

- name: Capture the SSHFP entries
  shell: "ssh-keygen -r {{ ansible_nodename }}|awk '{print $4, $5, $6}'"
  register: sshfp_entries
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.