새로운 버전의 openssh에서 SSH 키 지문을 (이전) 16 진 형식으로 가져옵니다. 것으로 보입니다. 클라이언트 컴퓨터에서 서버로 ssh하려고합니다. 클라이언트

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 root@host.local (ECDSA)

지문이 16 ​​진수 대신 base64로 인코딩 된 버전으로 표시되는 것처럼 보입니다.

서버 키의 체크섬을 (이전) 클라이언트 (콜론으로 구분 된 16 진수, sha1 해시)가보고 한 것과 동일한 형식으로 가져 와서 동일한 지 확인하려면 어떻게해야합니까?

편집 :
이전 버전의 SSH는 내가 잘못 생각한 sha1 체크섬이 아닌 md5 체크섬을 제공합니다 . -E 옵션에서 해당 체크섬을 사용하면 (현재 허용되는 응답 상태 여야 함) 원하는 출력이 제공됩니다.



답변

클라이언트는 서버 키의 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

당신이 당신의 대답에 설명하는 그러한하라 키리없이 필요한 동일한 지문을 얻을 것입니다.


답변

그것이 나오는 것에 따라, SSH 요리 책은 수동으로 이전 진수 형식으로 키를 생성하는 방법이있다. 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 / :. * $ // ‘

후행 콜론을 제거하십시오 (콜론을 교체 한 다음 공백과 줄 끝까지 아무 것도 포함하지 않음).


답변

이런 경우에는 다음과 같은 작은 스크립트를 사용합니다 (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


답변