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?
Ana bilgisayarım için DNS’de SSHFP kayıtları kurmam gerekiyor. Bazı araştırmalar yaptım ama iyi bir örnek bulamadım.
Yanıtlar:
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ı üç şeyden oluşur:
2015 yılı itibariyle SSHFP'de tanımlanan dört farklı algoritma vardır . Her algoritma bir tamsayı ile temsil edilir. Algoritmalar:
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:
Parametreyi ssh-keygen
kullanarak kayıtları oluşturmak için kullanabilirsiniz -r
, ardından ana bilgisayar adı (bunun yerine parmak izlerini etkilemez, böylece ne istersen belirleyebilirsiniz)
Kullanımı ssh-keygen
ve 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
Bazen ssh-keygen
genel sertifikanın yerini isteyecektir. ssh-keygen
Sorarsa, 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ış 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
Mevcut 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 ask
için, genellikle SSH istemcinizin config komutunu kullanın ~/.ssh/config
.
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.
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.
Kukla kullanıyorsanız, facter
destek 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
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
ssh-keygen -r
Ayrıca (IANA'da deneysel numarayı 4 kullanılarak ed25519 tip kayıtları kolları iana.org/assignments/dns-sshfp-rr-parameters/... )