새로운 버전의 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 지원을 제거하지 않는 한) 그것이 작동하지 않는 이유는 없습니다. 명령 sha1이 md5! 대신 잘못 표시 됩니다 . 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.