내 호스트의 DNS에 SSHFP 레코드를 설정해야 합니다. 몇 가지 검색을 해봤지만 좋은 예를 찾지 못했습니다.
- SSHFP 레코드란 무엇입니까?
- SSHFP 레코드는 어떤 모습인가요?
- SSHFP 레코드를 어떻게 생성하나요?
답변1
SSHFP 레코드란 무엇입니까?
SSHFP 레코드는 SSH에 사용되는 공개 키의 지문이 포함된 DNS 레코드입니다. 주로 DNSSEC 지원 도메인과 함께 사용됩니다. SSH 클라이언트가 서버에 연결되면 해당 SSHFP 레코드를 확인합니다. 기록 지문이 서버와 일치하면 해당 서버는 합법적이고 안전하게 연결할 수 있는 것입니다.
SSHFP 레코드는 어떤 모습인가요?
SSHFP 레코드는 세 부분으로 구성됩니다.
- 공개 키 알고리즘
- 지문 유형
- 지문(16진수)
공개 키 알고리즘
SSHFP에는 다섯 가지 알고리즘이 정의되어 있습니다.2021년 기준. 각 알고리즘은 정수로 표시됩니다.알고리즘은:
- 1-RSA
- 2-DSA
- 3 - 타원 곡선 디지털 서명 알고리즘
- 4-Ed25519
- 6 - Ed448
지문 유형
SSHFP에는 두 가지 지문 유형이 정의되어 있습니다.2012년 기준. 각 지문 유형은 정수로 표시됩니다.이것들은 모두:
- 1-SHA-1
- 2-SHA-256
SSHFP 레코드를 생성하는 방법은 무엇입니까?
당신은 그것을 사용할 수 있습니다SSH 키 생성기매개변수와 호스트 이름을 사용하여 로컬에서 레코드를 생성합니다. -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