PEM ssh 키의 지문


30

실행중인 ssh-agent에 추가하는 PEM 파일이 있습니다.

$ file query.pem
query.pem: PEM RSA private key

$ ssh-add ./query.pem
Identity added: ./query.pem (./query.pem)

$ ssh-add -l | grep query
2048 ef:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX ./query.pem (RSA)

파일에서 직접 키의 지문 (ssh-agent에 표시)을 어떻게 얻을 수 있습니까? 나는 알고있다 ssh-keygen -l -f some_key"정상적인"SSH 키에 대한하지만 PEM 파일에 대한 작품.

.pem 파일에서 ssh-keygen을 시도하면 다음과 같은 결과가 나타납니다.

$ ssh-keygen -l -f ./query.pem                                             
key_read: uudecode PRIVATE KEY----- failed
key_read: uudecode PRIVATE KEY----- failed
./query.pem is not a public key file.

이 키는 다음으로 시작합니다.

-----BEGIN RSA PRIVATE KEY-----
MIIEp.... etc.

다음과 같은 "일반"개인 키와 달리

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,E15F2.... etc.

PEM 파일에서 작동하지 않는 이유는 무엇입니까? 시도 할 때 어떤 오류가 발생합니까? .ssh/id_rsaOpenSSH의 모든 기본값을 사용하여 생성 된 파일은 PEM 파일이다. 개인 키는 기본적으로 PEM으로 인코딩됩니다. 실제로 OpenSSL로 생성 한 RSA 키를 OpenSSH와 직접 사용할 수 있습니다.
Zoredache

.pem의 ssh-keygen에서 출력 된 설명으로 업데이트 됨
알 수 없음

@Zoredache : 7.2 이전 (2016 년이 Q 이후) ssh-keygen -l은 비공개 키 파일을 읽을 수 없지만 다른 ssh-keygen(및 ssh*) 작업은 읽을 수 없습니다 . 그러나 ssh-keygen 생성 키를 그것은 PrivateKey의 파일 등을 모두 기록 id_rsa 하고 있는 해당 공개 키 파일 .pub추가 등을 id_rsa.pub. 이전 ssh-keygen -l .pub 지정한 파일 이름에 추가 하고 해당 공개 키 파일을 읽으 려고 시도 합니다.
dave_thompson_085

답변:


34

손실 된 공개 키 파일의 지문을 검색 하려면 개인 키 파일에서 지문을 복구 할 수 있습니다 .

$ ssh-keygen -yf path/to/private_key_file > path/to/store/public_key_file

그런 다음 공개 지문을 확인할 수 있습니다.

$ ssh-keygen -lf path/to/store/public_key_file
2048 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX user@host (RSA)

일부 최신 시스템에서는 키의 SHA256 지문을 인쇄합니다. 옵션을 사용하여 키의 MD5 지문 (콜론 형식)을 인쇄 할 수 있습니다 -E.

$ ssh-keygen -E md5 -lf path/to/store/public_key_file
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

또는 하나의 명령 줄로 :

$ ssh-keygen -yf /etc/ssh/ssh_host_ecdsa_key | ssh-keygen -E md5 -lf -
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

@MikeD의 답변은 실제로 OP가 찾고 있던 것과 내가 찾던 것에 대한 "올바른"답변입니다. AWS는 콜론으로 구분 된 숫자 쌍으로 지문을 표시된 형식으로 제공합니다. 제공된 AWS 페이지에서 가져온 그의 솔루션도 이와 동일한 방식으로 지문을 생성하므로 올바르게 확인할 수 있습니다.
Mike Williamson

50

AWS의 " 키 페어 지문 확인 "은 키 생성 방식에 따라 문제를 해결하는 2 개의 단일 라이너를 제공합니다.

AWS를 사용하여 키 페어를 생성 한 경우 :

$ openssl pkcs8 -in query.pem -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

또는 타사 도구를 사용하여 키 페어를 만든 경우 :

$ openssl rsa -in query.pem -pubout -outform DER | openssl md5 -c
writing RSA key
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

(위 출력에서 ​​수정 된 지문)


6

다음은 공개 키 파일을 로컬로 만들 필요없이 원하는 작업을 수행하는 하나의 라이너입니다.

$ ssh-keygen -lf /dev/stdin <<< $( ssh-keygen -f ~/.ssh/keyname.pem -y )
2048 14:df:c7:b7:f1:26:7f:87:d5:e7:10:6c:ac:af:a2:03 /dev/stdin (RSA)

이것은 <<<파일 에서만 작동 /dev/stdin하는 파이프 대신 표준 파일 ( ) 로 stdin을 사용할 수 있도록 bash here 문자열 을 사용 ssh-keygen합니다.

현재로 릴리스의 OpenSSH 7.2 ssh-keygen 표준 입력에서 지문 지원 :

  • ssh-keygen (1) : 표준 입력에서 지문을 입력 할 수 있습니다 (예 : "ssh-keygen -lf-").

이 명령은 암호를 사용하고 에이전트를 사용하지 않는 개인 키와는 관련이 없습니다. 암호 문구를 사용하지 않는 AWS 또는 OpenStack에서 생성 한 pem 파일과 함께 작동해야합니다.

자세한 내용은 https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdin 을 참조 하십시오 .


릴리스 정보는 말하지만, 7.2로 소스에 따라하지 않았다 -l또한 읽기 지원 의 PrivateKey 파일을 (그러나 하지 표준 입력에서).
dave_thompson_085

2

개인 키 파일이 아닌 공개 키 파일에서 지문을 얻습니다.

실제로 ssh-keygen은 이미 다음과 같이 말했습니다.

./query.pem은 공개 키 파일이 아닙니다.

키의 공개 절반에 대해 실행하면 작동합니다.

더 일반적으로 말하면

지문이 존재하는 이유는 공개 키를 식별 할 수 있기 때문입니다. 실제로, 개인 키의 해시를 얻는 것은 서버에 쓸모가 없다는 것 외에도 잠재적 인 보안 문제입니다 (문제의 개인 키가없는 경우도 있음).

공개 키가 있으면 프로세스는 클라이언트가 해당 개인 절반을 보류하는지 확인하는 것입니다. 확인하려는 키를 이미 알고 있으므로 지문이 필요하지 않습니다.


문제는이 개인 키에 대한 공개 키가 없다는 것 ssh-keygen입니다. .
알 수없는

그렇다면 당신이 할 수있는 일은 없습니다. 당신은 반대로 할 수있는 것보다 더 이상 개인 부분에서 키의 공개 절반을 얻을 수 없습니다.
Stephane

3
맞습니다. @ominug가 위에서 지적 했듯이이 작업을 ssh-keygen -yf수행합니다.
Steve Bennett

4
@Stephane 순수한 RSA 수준에서는 정확하지만 실제로 키가 PKCS 사양에 저장되는 방식은 개인 키 형식에 실제로 두 키가 모두 포함됩니다. 에 대한 비교 사양 민간공공
는 Håkan 고 Lindqvist

"개인 부분에서 공개 키의 절반을 얻을 수는 없습니다 ..."-네, 아마도 가능합니다. 개인 키에서 모듈러스를 가져 와서 65537을 공개 지수로 사용하면 공개 키를 찾을 수 있습니다.
Jim Flood
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.