ホストのDNSにSSHFPレコードを設定する必要があります。いくつかの検索をしてみましたが、良い例が見つかりませんでした。
- SSHFPレコードとは何ですか?
- SSHFPレコードはどのようなものですか?
- SSHFPレコードをどのように生成しますか?
答え1
SSHFPレコードとは何ですか?
SSHFPレコードは、SSHで使用される公開鍵の指紋を含むDNSレコードです。主にDNSSECサポートドメインと一緒に使用されます。 SSHクライアントがサーバーに接続したら、対応するSSHFPレコードを確認します。履歴指紋がサーバーと一致する場合、そのサーバーは正当かつ安全に接続できるようになります。
SSHFPレコードはどのようなものですか?
SSHFPレコードは3つの部分で構成されています。
- 公開鍵アルゴリズム
- 指紋タイプ
- 指紋(16進数)
公開鍵アルゴリズム
SSHFPには5つのアルゴリズムが定義されています。2021年基準。各アルゴリズムは整数で表されます。アルゴリズムは:
- 1-RSA
- 2-DSA
- 3 - 楕円曲線デジタル署名アルゴリズム
- 4-Ed25519
- 6 - Ed448
指紋タイプ
SSHFPには2つの指紋タイプが定義されています。2012年基準。各指紋タイプは整数で表されます。これらはすべて:
- 1-SHA-1
- 2-SHA-256
SSHFPレコードを生成する方法は?
あなたはそれを使用することができますSSHキージェネレータパラメータとホスト名を使用してローカルにレコードを生成します。-r
これは指紋に影響を与えないため、必要に応じて指定できます。
-D
ssh-keyscanを使用すると、ホスト名の後にパラメータを使用してリモートサーバーのレコードを生成できます。
はい
使用ssh-keygen
と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
ノート
場合によってssh-keygen
は、認定証明書の場所を尋ねることがあります。要求する場合は、ssh-keygen
必要なすべてのSSHFPレコードが生成されるように、毎回異なる証明書を指定して複数回実行する必要があります。公開鍵は通常にあります/etc/ssh
。
答え2
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"
Ed448 keys = "6"
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
。
答え3
以前のバージョンの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 ' ')"
;;
ed448)
echo "$HOST IN SSHFP 6 1 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha1sum | cut -f 1 -d ' ')"
echo "$HOST IN SSHFP 6 2 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha256sum | cut -f 1 -d ' ')"
;;
esac
done
編集:* BSDをサポートするalex-dupuy PRの新しいバージョン。
https://github.com/mindfuckup/Scripts/blob/master/sshfpgen
答え4
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