
내 호스트의 DNS에 SSHFP 레코드를 설정해야 합니다. 몇 가지 검색을 수행했지만 좋은 예를 찾지 못했습니다.
- SSHFP 레코드란 무엇입니까?
- SSHFP 레코드는 어떤 모습인가요?
- SSHFP 레코드를 어떻게 생성하나요?
답변1
SSHFP 레코드란 무엇입니까?
SSHFP 레코드는 SSH에 사용되는 공개 키의 지문이 포함된 DNS 레코드입니다. 주로 DNSSEC 지원 도메인과 함께 사용됩니다. SSH 클라이언트가 서버에 연결되면 해당 SSHFP 레코드를 확인합니다. 기록 지문이 서버와 일치하면 서버가 합법적이며 연결해도 안전합니다.
SSHFP 레코드는 어떤 모습인가요?
SSHFP 레코드는 다음 세 가지로 구성됩니다.
- 공개 키 알고리즘
- 지문 유형
- 지문(16진수)
공개 키 알고리즘
SSHFP에는 다섯 가지 알고리즘이 정의되어 있습니다.2021년 기준. 각 알고리즘은 정수로 표시됩니다.알고리즘은 다음과 같습니다.:
- 1 - RSA
- 2 - DSA
- 3 - ECDSA
- 4 - Ed25519
- 6 - Ed448
지문 유형
SSHFP에는 두 가지 지문 유형이 정의되어 있습니다.2012년 기준. 각 지문 유형은 정수로 표시됩니다.이것들은:
- 1 - SHA-1
- 2 - SHA-256
SSHFP 레코드를 어떻게 생성하나요?
당신이 사용할 수있는ssh-keygen로컬에서 매개변수와 호스트 이름을 사용하여 레코드를 생성합니다 -r
(지문에는 영향을 주지 않으므로 원하는 대로 지정할 수 있습니다).
-D
ssh-keyscan을 사용하면 매개변수와 호스트 이름을 사용하여 원격 서버에 대한 레코드를 생성할 수 있습니다 .
예
사용 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
.
답변2
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"
Ed448 keys = "6"
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
.
답변3
이전 버전의 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 ' ')"
;;
ed448)
echo "$HOST IN SSHFP 6 1 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha1sum | cut -f 1 -d ' ')"
echo "$HOST IN SSHFP 6 2 $(cut -f2 -d ' ' "$pubkey" | base64 --decode | sha256sum | cut -f 1 -d ' ')"
;;
esac
done
편집: *BSD를 지원하는 alex-dupuy의 PR이 포함된 새 버전입니다.
답변4
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