새로운 버전의 openssh에서 SSH 키 지문을 (이전) 16 진 형식으로 가져옵니다.


40

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 옵션에서 해당 체크섬을 사용하면 (현재 허용되는 응답 상태 여야 함) 원하는 출력이 제공됩니다.

답변:


52

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

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


1
불행히도 이것은 작동하지 않습니다. 내 질문에는 제안 된 명령을 실행 한 결과가 포함되어 있습니다. 최신 버전의 ssh-keygen은 md5 해시를 16 진 문자열 대신 (base64 인코딩?) 문자열로 제공합니다. "모든하라 키리"(적절한 설명!)는 새로운 버전의 openssh 도구에서 오래된 스타일의 16 진수 문자열을 얻는 가장 쉬운 방법입니다.
stochastic

FreeBSD가 무언가를 깨뜨리지 않으면 (또는 MD5 지원을 제거하지 않는 한) 그것이 작동하지 않는 이유는 없습니다. 명령 sha1md5! 대신 잘못 표시 됩니다 . openssh-6.9가있는 오래된 Ubuntu 버전이 있지만 제대로 작동합니다.
Jakuje

1
sha1 대신 md5 ... 어떻게 그리웠는지 모르겠습니다. 실제로 일치하는 출력을 제공합니다.
확률 론적

나는 반대의 문제가 있습니다. md5가 있고 다른 형식을 원합니다. 어떻게 구할 수 있습니까?
Gabriel Staples

1
우분투에서 명령이 실행될 때 작동합니다. centos에서 명령이 실행될 때 작동하지 않습니다.
Marinos An

5

그것이 나오는 것에 따라, 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 / :. * $ // '

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


4

이런 경우에는 다음과 같은 작은 스크립트를 사용합니다 (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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.