dns sshfp record für alle Algorithmen gleichzeitig erstellen
Freitag, Januar 9th, 2015Wie ich schon vor einigen Jahren geschrieben habe, kann man die SSH fingerprints im DNS hinterlegen, um SSH Verbindungen zu validieren.
# dig -t sshfp blog.chr.istoph.de
;; ANSWER SECTION:
blog.chr.istoph.de. 7199 IN SSHFP 1 1 D931B1124CC5DA23DB2131C62BA9D286081E3EA7
...
Dafür hinterlegt man die Secure Hash Algorithm (SHA) Summen im DNS:
ssh-keygen -r blog.chr -f /etc/ssh/ssh_host_rsa_key.pub
blog IN SSHFP 1 1 d931b1124cc5da23db2131c62ba9d286081e3ea7
blog IN SSHFP 1 2 0fe30bacf0833a9051a74cec431af450ceeca4171b3da5bf0550ada55adadbfa
Jetzt gibt es aber neue Algorithmen die in SSH Einzug erhalten haben.
1: RSA
2: DSA
3: ECDSA
4: ED25519
Da man mit ssh-keygen
immer nur einen Key haschen kann und die neue Kurve ED25519 noch nicht von Ubuntu 14.04. unterstützt wird siehe Beispiel:
ssh-keygen -r blog.chr -f /etc/ssh/ssh_host_ed25519_key.pub
export_dns_rr: unsupported algorithm and/or digest_type
So habe ich mir ein Skript geschrieben, das mir alle Fingerprints auf einmal erstellt.
#!/bin/bash
domain="$1"
if [ "$domain" = "" ]; then
echo $0 domain
exit 0
fi
function sshfp() {
a=$1 #algorithmus
f=$2 #file
echo $domain IN SSHFP $a 1 $(awk '{print $2}' $f|base64 -d|sha1sum|awk '{print $1}')
echo $domain IN SSHFP $a 2 $(awk '{print $2}' $f|base64 -d|sha256sum|awk '{print $1}')
}
for f in /etc/ssh/ssh_host_*_key.pub; do
case "$(echo $f|awk -F '_' '{print $3}')"
in
rsa)
sshfp 1 $f
;;
dsa)
sshfp 2 $f
;;
ecdsa)
sshfp 3 $f
;;
ed25519)
sshfp 4 $f
;;
esac
done | sort
Die Ausgabe sieht dann folgendermaßen aus:
(mehr …)