Saya perlu mengatur data SSHFP dalam DNS untuk host saya. Saya telah melakukan pencarian tetapi saya belum menemukan contoh yang bagus.
- Apa catatan SSHFP?
- Seperti apa rekaman SSHFP?
- Bagaimana cara membuat catatan SSHFP?
Saya perlu mengatur data SSHFP dalam DNS untuk host saya. Saya telah melakukan pencarian tetapi saya belum menemukan contoh yang bagus.
Jawaban:
Catatan SSHFP RR adalah catatan DNS yang berisi sidik jari untuk kunci publik yang digunakan untuk SSH. Mereka sebagian besar digunakan dengan domain yang diaktifkan DNSSEC. Ketika klien SSH terhubung ke server, ia akan memeriksa catatan SSHFP yang sesuai. Jika sidik jari catatan cocok dengan server, server tersebut sah dan aman untuk terhubung.
Catatan SSHFP terdiri dari tiga hal:
Ada empat algoritma berbeda yang didefinisikan dalam SSHFP pada 2015 . Setiap algoritma diwakili oleh integer. Algoritma tersebut adalah:
Dua jenis sidik jari didefinisikan dalam SSHFP pada 2012 . Setiap jenis sidik jari diwakili oleh bilangan bulat. Ini adalah:
Anda dapat menggunakan ssh-keygen
untuk menghasilkan catatan menggunakan -r
parameter, diikuti oleh nama host (yang tidak mempengaruhi sidik jari sehingga Anda dapat menentukan apa pun yang Anda suka)
Menggunakan ssh-keygen
dan 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
Terkadang ssh-keygen
akan menanyakan lokasi sertifikat publik. Jika diminta, Anda harus menjalankan ssh-keygen
beberapa kali dan setiap kali menentukan sertifikat yang berbeda untuk memastikan bahwa Anda menghasilkan semua catatan SSHFP yang diperlukan. Kunci publik Anda biasanya terletak di /etc/ssh
.
Otentikasi Entitas Bernama (DANE) berbasis DNS ( RFC 6698 ) adalah penerus potensial SSHFP RR. DANE sangat mirip dengan SSHFP RR tetapi tidak terbatas pada SSH. Ini menggunakan TLSA RR sebagai gantinya dengan format yang sangat mirip.
Saya tidak yakin apakah ssh-keygen
berfungsi dengan kunci yang ada. Jika tidak, Anda masih dapat dengan mudah merakitnya di shell Anda (yang saya sukai), dan tanpa software mewah atau antarmuka jarak jauh.
Catatan seperti disebutkan ...
my.domain.com IN SSHFP 2 1 72d30d211ce8c464de2811e534de23b9be9b4dc4
... ada 6 bagian:
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
Untuk memanfaatkannya, masukkan VerifyHostKeyDNS ask
konfigurasi klien SSH Anda, biasanya ~/.ssh/config
.
ssh-keygen -r
tidak menghasilkan catatan SSHFP untuk kunci yang ada meskipun fakta bahwa nama perintah menyarankan itu hanya untuk Membuat Generasi.
Versi ssh-keygen yang lebih lama tidak menghasilkan semua kunci yang tersedia (mis. Tidak ada dukungan untuk ecdsa dan sha256). Skrip ini memang membuat semua catatan untuk semua kunci yang tersedia di /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
Sunting: Versi Baru dengan PR dari alex-dupuy dengan dukungan * BSD.
Jika Anda menggunakan Wayang, facter
ada dukungan bawaan untuk sshfp
. Plus jika Anda menggunakan PuppetDB, Anda dapat dengan mudah mengekstrak info ini untuk semua host Anda.
facter | grep -i sshfp
sshfp_dsa => SSHFP 2 1 e1a3e639d6dbd48d3964ebfb772d2d11f1065682
SSHFP 2 2 4f620ce2bc97d91ae5eff42fba621d65b677ab725f275f56b2abd1303c142b73
sshfp_rsa => SSHFP 1 1 a78351af371faf3f19533c3a4a9e967543d7d2f5
SSHFP 1 2 795943a6ee8b53c818cfef5781209e25a6eb4bc386813db60d3ff2c1569692fc
Ini adalah bagaimana saya mendapatkan catatan SSHFP saya melalui Ansible :
- name: Capture the SSHFP entries
shell: "ssh-keygen -r {{ ansible_nodename }}|awk '{print $4, $5, $6}'"
register: sshfp_entries
ssh-keygen -r
juga menangani catatan tipe ed25519 (menggunakan nomor eksperimental 4 dari iana iana.org/assignments/dns-sshfp-rr-parameters/... )