मुझे अपने होस्ट के लिए DNS में SSHFP रिकॉर्ड सेट करने की आवश्यकता है। मैंने कुछ खोज की है लेकिन मुझे कोई अच्छा उदाहरण नहीं मिला है।
- SSHFP रिकॉर्ड क्या हैं?
- SSHFP रिकॉर्ड्स कैसा दिखता है?
- मैं SSHFP रिकॉर्ड कैसे बनाऊं?
मुझे अपने होस्ट के लिए DNS में SSHFP रिकॉर्ड सेट करने की आवश्यकता है। मैंने कुछ खोज की है लेकिन मुझे कोई अच्छा उदाहरण नहीं मिला है।
जवाबों:
SSHFP RR रिकॉर्ड DNS रिकॉर्ड होते हैं जिनमें SSH के लिए उपयोग की जाने वाली सार्वजनिक कुंजी के लिए फिंगरप्रिंट होते हैं। वे ज्यादातर DNSSEC सक्षम डोमेन के साथ उपयोग किए जाते हैं। जब SSH क्लाइंट किसी सर्वर से जुड़ता है तो वह SSHFP रिकॉर्ड की जांच करता है। यदि रिकॉर्ड फिंगरप्रिंट सर्वर से मेल खाता है, तो सर्वर वैध है और कनेक्ट करना सुरक्षित है।
SSHFP रिकॉर्ड में तीन चीजें शामिल हैं:
2015 के रूप में SSHFP में परिभाषित चार अलग-अलग एल्गोरिदम हैं । प्रत्येक एल्गोरिदम को एक पूर्णांक द्वारा दर्शाया जाता है। एल्गोरिदम हैं:
2012 के अनुसार दो फिंगरप्रिंट प्रकार SSHFP में परिभाषित किए गए हैं । प्रत्येक फिंगरप्रिंट प्रकार एक पूर्णांक द्वारा दर्शाया जाता है। य़े हैं:
आप पैरामीटर ssh-keygen
का उपयोग करके रिकॉर्ड उत्पन्न करने के लिए उपयोग कर सकते हैं -r
, इसके बाद hostname (जो उंगलियों के निशान को प्रभावित नहीं करता है ताकि आप इसके बजाय जो चाहें निर्दिष्ट कर सकें)
प्रयोग 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
।
नामांकित संस्थाओं (डीएएनई) ( आरएफसी 6698 ) का डीएनएस आधारित प्रमाणीकरण एसएसबीएफपी आरआर के लिए एक संभावित उत्तराधिकारी है। DANE SSHFP RR के समान है लेकिन SSH तक सीमित नहीं है। यहबहुत समान प्रारूप के बजाय TLSA RR का उपयोग करता है।
मुझे यकीन नहीं है कि 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/config
।
ssh-keygen -r
करता है , इस तथ्य के बावजूद कि कमांड का नाम केवल जेनरेटिंग के लिए है।
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 समर्थन के साथ एलेक्स-दुपी से पीआर के साथ नया संस्करण।
आप कठपुतली का उपयोग करते हैं, के 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
यह है कि मैं अपने SSHFP रिकॉर्ड्स को किस प्रकार से प्राप्त कर रहा हूं :
- name: Capture the SSHFP entries
shell: "ssh-keygen -r {{ ansible_nodename }}|awk '{print $4, $5, $6}'"
register: sshfp_entries
ssh-keygen -r
यह भी ed25519 प्रकार के रिकॉर्ड (iana iana.org/assignments/dns-sshfp-rr-parameters/… से प्रयोगात्मक संख्या 4 का उपयोग करके )