호스트의 DNS에 SSHFP 레코드를 설정해야합니다. 몇 가지 검색을 수행했지만 좋은 예를 찾지 못했습니다.
- SSHFP 레코드 란 무엇입니까?
- SSHFP 레코드는 어떻게 생겼습니까?
- SSHFP 레코드를 작성하는 방법
호스트의 DNS에 SSHFP 레코드를 설정해야합니다. 몇 가지 검색을 수행했지만 좋은 예를 찾지 못했습니다.
답변:
SSHFP RR 레코드는 SSH에 사용되는 공개 키의 지문이 포함 된 DNS 레코드입니다. 이들은 주로 DNSSEC 가능 도메인과 함께 사용됩니다. SSH 클라이언트가 서버에 연결하면 해당 SSHFP 레코드를 확인합니다. 레코드 지문이 서버와 일치하면 서버가 합법적이며 연결해도 안전합니다.
SSHFP 레코드는 다음 세 가지로 구성됩니다.
2015 년 현재 SSHFP에 정의 된 네 가지 알고리즘이 있습니다 . 각 알고리즘은 정수로 표시됩니다. 알고리즘은 다음과 같습니다.
2012 년 현재 SSHFP에는 두 가지 지문 유형이 정의되어 있습니다. 각 지문 유형은 정수로 표시됩니다. 이것들은:
매개 변수와 호스트 이름을 ssh-keygen
사용하여 레코드를 생성하는 데 사용할 수 있습니다 -r
(지문에 영향을 미치지 않으므로 대신 원하는 것을 지정할 수 있습니다)
사용 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
.
명명 된 엔터티 (DANE) 의 DNS 기반 인증 ( RFC 6698 )은 SSHFP RR의 후속 모델입니다. 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 클라이언트의 구성에 보통을 넣으 십시오 ~/.ssh/config
.
ssh-keygen -r
않습니다 명령의 이름이 생성 만의 제안 사실에도 불구하고 기존의 키에 대한 SSHFP 레코드를 생성.
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를 지원하는 alex-dupuy의 PR 새 버전.
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
ssh-keygen -r
또한 (IANA에서 실험 번호 4를 사용 ed25519 유형의 기록을 처리 iana.org/assignments/dns-sshfp-rr-parameters/... )