%2016%EC%A7%84%EC%88%98%20%ED%98%95%EC%8B%9D%EC%9C%BC%EB%A1%9C%20SSH%20%ED%82%A4%20%EC%A7%80%EB%AC%B8%EC%9D%84%20%EA%B0%80%EC%A0%B8%EC%98%B5%EB%8B%88%EB%8B%A4..png)
openssh가 키 지문을 표시하는 방식을 변경한 것 같습니다.
클라이언트 시스템에서 서버로 SSH를 시도하고 있습니다.
- 클라이언트: OpenSSH 6.6.1을 실행하는 ubuntu 14.04
- 서버: OpenSSH 7.2p2를 실행하는 FreeBSD.
클라이언트는 서버 키의 md5 해시를 다음과 같이 16개 쌍의 16진수 시퀀스로 보고합니다.
a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a
서버는 기본적으로 sha256 해시를 사용하지만 덕분에이 답변다음을 실행하여 sha1 해시를 강제로 제공할 수 있습니다.
[root@host /etc/ssh]# ssh-keygen -l -E sha1 -f ssh_host_ecdsa_key.pub
결과가 다음과 같기를 원합니다.
a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a
하지만 대신에 나는 이것을 얻습니다:
256 SHA1:KIh0ejR4O+RqrSq7JdGAASddRfI [email protected] (ECDSA)
이제 16진수 대신 base64로 인코딩된 지문 버전이 표시되는 것 같습니다.
(이전) 클라이언트(콜론으로 구분된 16진수, sha1 해시)에서 보고한 것과 동일한 형식으로 서버 키의 체크섬을 얻어 동일한지 확인하려면 어떻게 해야 합니까?
편집하다: 이전 버전의 SSH는 다음을 제공합니다.MD5체크섬,~ 아니다내가 잘못 생각한 sha1 체크섬. -E 옵션에서 해당 체크섬(현재 허용되는 답변에 명시되어 있음)을 사용하면 원하는 출력이 제공됩니다.
답변1
클라이언트는 서버 키의 sha1 해시를 다음과 같이 16개 쌍의 16진수 시퀀스로 보고합니다.
a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a
이것은 MD5 해시입니다.
보시다시피 달리는 중
ssh-keygen -l -E md5 -f ssh_host_ecdsa_key.pub
답변에서 설명하는 하라키리 없이 필요한 것과 동일한 지문을 얻을 수 있습니다.
답변2
이런 경우에는 다음과 같은 작은 스크립트를 사용합니다(Debian 및 Ubuntu에서 테스트됨).
#!/bin/sh
# Gather the public ssh host keys for the given host
# and for each key print the fingerprint in hex format using the given
# checksum command (e.g. md5sum, sha256sum, ...)
if [ "$#" != 2 ]; then
echo "usage: $0 hostname checksum_command"
exit 1
fi
ssh-keyscan $1 2>/dev/null | while read -r line; do
echo "Scanned key:"
echo $line
echo "$2 fingerprint:"
echo $line | awk '{print $3}' | base64 -d | $2 -b | awk '{print $1}' | sed 's/../&:/g' | sed 's/:$//'
echo
done
사용 예:
$ myscript host.example.com md5sum
Scanned key:
host.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJUXq7vpcEpnZQxxiLw/tdg8ui4LoqbW1O5nGyLtGw49
md5sum fingerprint:
6c:ef:26:f7:98:ad:ed:5b:cc:ff:83:13:46:c9:f6:79
Scanned key:
host.example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4aLMajBvisnWNR2VX5K1KEkNeRmzlcs+svbY6/DiumMTZNtqB5duZjGkMmEbIclHaT7rQG9efAWsNhai5cJVRZ4VX1Gu/TLycEk4OY56MrrWjQYweSUr/W6E0eVCf7gh/ym2vMcevct4373fGDdlogk9Wa97lDV6PUXRy/znxRlo3tBc6KMOZIBoPu8UjeLr2ZPNPjO6hXX/96HbYfboxjhMl5eb8AWR0MGd4qU7RZZa2XhT4/4eSo8h9gEq8V3tasB24fMdw3K+HRiDyZm8uoNq+IrJlC22pBpzxRQtsv0Nd+uC5pK/UPVI3AFfdHMrmn7IHRio8aEaTloM6MRysGMtXE0kFQ/pV2U3TBmK/9wxID83qMDsQeUH4oTyjSJ0dCBuqgVQUg44z5qXVOK7gruvZSTyH7DsIyAXhlvLNwdtXPJ4HPQ90ZxLpiFWYgSPErQgbfgKeFkoSQiSP1M+UMkITCGRKMeUeDINheRJh/5y8+C3DjE54xyI4903ztyI7HqgVTOOFCtf+dlhCuS6+J20PFXEHDMdGCwmPQrKOG9Rb4NBxuvtn7MxJnwnlIu3nhDjr8SlZDOTvuK+bLpc4AZwEsNY7ANKFvj2mqE6hjkhu+x7khg84VQ6BKOmHIQnMrCpqICaNgB7Vz2d183BETrnfKQaPh79G5cQox5vwvw==
md5sum fingerprint:
b2:9c:cd:30:b1:38:e3:d1:17:d6:73:eb:03:9a:80:83
$ myscript host.example.com sha256sum
Scanned key:
host.example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4aLMajBvisnWNR2VX5K1KEkNeRmzlcs+svbY6/DiumMTZNtqB5duZjGkMmEbIclHaT7rQG9efAWsNhai5cJVRZ4VX1Gu/TLycEk4OY56MrrWjQYweSUr/W6E0eVCf7gh/ym2vMcevct4373fGDdlogk9Wa97lDV6PUXRy/znxRlo3tBc6KMOZIBoPu8UjeLr2ZPNPjO6hXX/96HbYfboxjhMl5eb8AWR0MGd4qU7RZZa2XhT4/4eSo8h9gEq8V3tasB24fMdw3K+HRiDyZm8uoNq+IrJlC22pBpzxRQtsv0Nd+uC5pK/UPVI3AFfdHMrmn7IHRio8aEaTloM6MRysGMtXE0kFQ/pV2U3TBmK/9wxID83qMDsQeUH4oTyjSJ0dCBuqgVQUg44z5qXVOK7gruvZSTyH7DsIyAXhlvLNwdtXPJ4HPQ90ZxLpiFWYgSPErQgbfgKeFkoSQiSP1M+UMkITCGRKMeUeDINheRJh/5y8+C3DjE54xyI4903ztyI7HqgVTOOFCtf+dlhCuS6+J20PFXEHDMdGCwmPQrKOG9Rb4NBxuvtn7MxJnwnlIu3nhDjr8SlZDOTvuK+bLpc4AZwEsNY7ANKFvj2mqE6hjkhu+x7khg84VQ6BKOmHIQnMrCpqICaNgB7Vz2d183BETrnfKQaPh79G5cQox5vwvw==
sha256sum fingerprint:
f4:61:58:e4:90:65:c4:70:98:7f:d1:40:0a:d8:d9:79:14:e6:91:dc:b6:ed:91:8c:c0:df:d9:65:db:dd:a0:18
Scanned key:
host.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJUXq7vpcEpnZQxxiLw/tdg8ui4LoqbW1O5nGyLtGw49
sha256sum fingerprint:
4b:73:d1:d7:80:87:46:64:56:71:64:10:7a:66:83:9b:c7:58:39:0b:16:74:dd:9b:d9:4b:e5:d5:61:7e:99:45
답변3
밝혀진 바와 같이,SSH 요리책이전 16진수 형식으로 키를 수동으로 생성하는 방법이 있습니다. 나는 이것을 freebsd 서버에서 사용했습니다.
awk '{print $2}' key.pub | base64 -d | MD5 | sed 's/../&:/g; s/: .*$//'
이를 분석하면 다음과 같습니다.
awk '{print $2}' key.pub
키 자체인 "key.pub"의 두 번째(공백으로 구분된) 열을 인쇄합니다.
base64 -d
키는 base64로 인코딩됩니다. 그러면 키의 실제 바이트가 출력됩니다.
MD5
이는 ssh 요리책 페이지의 레시피에 지정된 'md5sum -b'에 해당하는 freebsd입니다.
sed 's/../&:/g; s/: .*$//'
여기에는 두 가지 sed 명령이 있습니다.
s/../&:/g;
줄의 모든 문자 쌍을 (끝의 'g' 플래그 덕분에) 콜론이 뒤따르는 동일한 쌍으로 바꿉니다.
s/: .*$//'
후행 콜론을 제거합니다(콜론과 공백, 줄 끝까지 아무것도 없는 내용으로 교체).
답변4
ssh-agent에 추가된 키의 경우 이 명령은 해당 MD5 공개 키 지문을 나열합니다.
ssh-add -l -E md5
디렉터리의 모든 공개 키에 대한 MD5 지문을 인쇄하려면 다음을 사용하세요.
find ~/.ssh/ -name *.pub -printf '%f\t' -exec ssh-keygen -l -E md5 -f {} \;
그러면 쉽게 식별할 수 있도록 파일 이름도 인쇄됩니다.