SSH 키 지문이란 무엇이며 어떻게 생성됩니까?


128

ssh새 컴퓨터에 접속할 때 항상이 메시지가 나타납니다 .

12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53

그것은 무엇을 의미합니까? 매번 모든 머신에 동일한 지문이 있습니까?

이 지문은 어떻게 생성됩니까? 어떤 매개 변수에 의존합니까?

답변:


65

지문은 호스트의 공개 키를 기반으로하며 일반적으로 "/etc/ssh/ssh_host_rsa_key.pub"를 ​​기반으로합니다. 일반적으로 연결중인 호스트를 쉽게 식별 / 확인할 수 있습니다.

지문이 변경되면 연결하려는 기기가 공개 키를 변경 한 것입니다. 이것은 나쁜 일이 아닐 수도 있지만 (ssh를 다시 설치하여 발생할 수 있음) 동일한 도메인 / IP에서 다른 시스템에 연결 중이거나 (로드 밸런서와 같은 것을 통해 연결하는 경우 발생할 수 있음) 또는 공격자가 사용자 / 암호를 스누핑 할 수있는 다른 호스트에 연결하기 위해 ssh 연결을 가로 채거나 다시 라우팅하는 중간자 (man-in-the-middle) 공격의 대상이되고 있습니다.

결론 : 변경된 지문이 경고되면 보안 연결을 통해 올바른 호스트에 실제로 연결되어 있는지 신중하게 확인하십시오. 대부분의 경우 이것이 무해하지만 잠재적 인 문제를 나타낼 수 있습니다.

참조 : http://www.lysium.de/blog/index.php?/archives/186-How-to-get-ssh-server-fingerprint-information.html
http://en.wikipedia.org/ wiki / Public_key_fingerprint


5
"... 실제로 안전한 연결을 통해 올바른 호스트에 연결하고 있는지주의해서 다시 확인하십시오"-어리석은 질문이지만 어떻게 쉽게 할 수 있습니까?
Savara

1
@Savara 이전에 연결하지 않은 SSH 서버에 연결하는 경우 서버 관리자에게 SSH 서버의 공개 키를 요청해야합니다. 서버 관리자가 텍스트를 줄 것입니다. 이 텍스트를 파일에 추가해야합니다 ~/.ssh/known_hosts. 이 방법으로 서버에 연결하면 공개 키를에 저장했기 때문에 SSH 클라이언트가이 서버를 인식합니다 known_hosts. 따라서 SSH 클라이언트가 "호스트의 신뢰성을 설정할 수 없습니다"라고 말할 때 실제로 "예"라고 말해서 는 안됩니다 . 항상 서버의 공개 키를 미리 추가해야합니다.
Utku

@Savara이 작업을 수행하면 SSH 클라이언트가 "클라이언트의 신뢰성을 설정할 수 없습니다"라고 말하거나 "서버의 공개 키가 변경되었습니다"라고 말할 때 비린내가 생긴다는 것을 알게됩니다. 따라서, 당신은 항상 당신에게 서버의 공개 키를 추가해야합니다 ~/.ssh/known_hosts사전에 파일을 결코 말하지 않을 당신의 SSH 클라이언트가 당신을 말할 때 예 "클라이언트의 인증을 설정할 수 없습니다"또는 당신을 말할 때 "서버의 공개 키되었습니다 변경되었습니다.
Utku

3
예, SSH 지문을 보는 메커니즘이 어떻게 작동하는지 잘 알고 있지만 많은 시간 동안 다른 채널을 통해 지문을 가져올 수있는 옵션이 없습니다. 슬프게도 우리가 자주 얻는 최고입니다.
Savara

"예"라고 대답 한 후에도 진위를 확인할 수있는 방법이 있습니까?
교환

104

다음을 사용하여 공개 키에 대한 지문을 생성 할 수 있습니다 ssh-keygen.

ssh-keygen -lf /path/to/key.pub

구체적인 예 (RSA 공개 키를 사용하는 경우) :

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

첫 번째 부분 (2048)은 키 길이 (비트)이고 두 번째 부분 (00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff)은 공개 키의 지문이고 세 번째 부분은 공개 키 파일 자체의 위치입니다.


12 : f8 : 7e : 78 : 61 : b4 : bf : e2 : de : 24 : 15 : 96 : 4e : d4 : 72 : 53 해당 공개 키로 변환하는 방법을 알고 있습니까?
Kit Ho

@KitHo 질문을 이해했는지 잘 모르겠습니다. 나는 ssh-keygen -lf당신이 원하는 것을 할 것이라고 생각하면서 예제를 업데이트했습니다 .
Benjamin Oakes

5
새 시스템에 SSH가 한창 때, 어떤 사람이 보는 것은 없는 사용자의 pubkey 지문하지만 호스트의 pubkey 지문. 따라서 질문의 맥락에 대한 더 좋은 예는 ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub입니다. localhost에 대한 SSH 로그인에서도 표시되는 지문을 보여줍니다.
tanius

57
ssh-keygen보고 sha256지문. md5지문 을 얻기 위해 나는 달렸다 ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub. #archlinux
Justin C

5
(@JustinC) OpenSSH 버전 6.8 (2015 년 3 월) 이상은 기본적으로 16 진수가 아닌 base64로 표시되는 SHA256으로 변경되었습니다. 클라이언트 사용 ssh -o FingerprintHash=md5또는 이와 동등한 ssh_config것을 사용하는 sshscp.
dave_thompson_085

72

지문은 Base64로 인코딩 된 공개 키 내의 이진 데이터에 대한 MD5입니다.

$ ssh-keygen -f foo
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in foo.
Your public key has been saved in foo.pub.
The key fingerprint is:
65:30:38:96:35:56:4f:64:64:e8:e3:a4:7d:59:3e:19 andrew@localhost
The key's randomart image is:
+--[ RSA 2048]----+
|       +*..+*    |
|      =. +.=     |
|     . . .o .    |
|         o+   E  |
|        S= . + o |
|        . o o +  |
|           .   . |
|                 |
|                 |
+-----------------+
$ cat foo.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp andrew@localhost
$ echo 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp' \
    | base64 -D | md5
6530389635564f6464e8e3a47d593e19

md5sum 6530389635564f6464e8e3a47d593e19는 분리 콜론없이 키가 생성 될 때 표시되는 지문입니다.


그러나 Amazon이 EC2 키 페어 콘솔에 표시하는 지문을 다루는 경우 불행히도 다른 짐승 일 수 있습니다 . 32 자리 16 진 문자열 인 경우 위의 표준 MD5 SSH 공개 키 지문입니다. 그러나 40 자리 16 진수 인 경우 실제로 개인 키 의 SHA1을 PKCS # 8 형식 으로 가져 와서 계산 한 지문 입니다.

$ openssl pkcs8 -in foo -nocrypt -topk8 -outform DER | openssl sha1 -c
e2:77:39:d3:53:a7:62:68:5f:da:82:0e:99:61:30:64:a2:88:c4:58

1
이 답변은 다음 시나리오에서 유용합니다. 시스템은 SHA1을 사용하여 지문을 계산하지만 친구는 md5를 사용합니다. SHA1 인 지문을 공유했는데 시스템에서 생성 한 MD5와 일치하지 않습니다. 도움이되었습니다. 감사합니다! sed 's | ^ ssh-rsa ||' /etc/ssh/ssh_host_rsa_key.pub | sed 's | ==. * $ | == |' | base64 -d | md5sum
Liczyrzepa 2016 년

SHA-1 또는 SHA-256 다이제스트를 사용하기 때문에이 지문이 DNS SSHFP 레코드의 지문과 일치하지 않는 이유를 이해하는 데 매우 관련이 있습니다.
neirbowj 2016

1
@Liczyrzepa 공개 키 필드는 키 유형과 비트 크기에 따라 끝에 '=='가 있거나 없을 수 있습니다. 더 안전하고 사용하기 쉬우 awk '{print $2}' /path/to/keyfile.pub거나 유사한 IMO .
dave_thompson_085

13
이것은 지문이 어떻게 계산되는지를 설명하는 유일한 해답입니다
greuze

2
그러나 Linux Mint에서 명령은 다음과 같습니다.cat id_rsa.pub | cut -d' ' -f2 | base64 -d | md5sum
greuze

13

SSH 키 파일을 확인하여 github에서 "배포 키"로보고 된 것과 동일한 지 확인하려는 경우 이는 사용자를위한 것입니다.

비공개 URL에서 : https://github.com/<username>/<repo_name>/settings/keys github 스크린 샷

터미널에서 :

$ ls -l id*
-rw-------  1 bruno  staff  1675 Mar 29 17:03 id_rsa
-rw-r--r--  1 bruno  staff   416 Mar 29 17:03 id_rsa.pub

$ ssh-keygen -E md5 -lf id_rsa
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e ec2-user@ip-10-2-1-16.ec2.internal (RSA)

$ ssh-keygen -E md5 -lf id_rsa.pub
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e ec2-user@ip-10-2-1-16.ec2.internal (RSA)

개인 키와 공개 키 모두에 대해 동일한 지문이 표시됩니다.

동일한 명령을 GitHub의 깔끔한 기능과 결합 할 수 있습니다. 이는 https://github.com/<username>.keys에서 사용자의 SSH 공개 키를 공개적으로 제공한다는 사실입니다.

여기에 그것을 사용할 수있는 하나의 라이너가 있습니다.

$ curl -sL https://github.com/RichardBronosky.keys | while read; do echo -e "\nkey #$((++i)):"; ssh-keygen -E md5 -lf - <<<"$REPLY"; echo $REPLY; done

key #1:
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e no comment (RSA)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJGT35gvsFveu+80qgurrLHId0h55E9jliM7Fo0mV9b7eg3EfyagkAcJUSMFkoov3HY4CW0yzOc7WlN57ABwvpRz1ioFDex0n0FkjoSEs5ROeT1OneRK6Bf6XnplgPuQ/LSSkv3kmK6I29R+YWi6TjDvLLoA5BrXJjOMfUv36jxWCDtk/5ZdhMZqhsMuDm06Jg5JBu6n5jQaZkmaIaunz7vOfwVG9LoCI+MYyIdo2S4VTva7Ee7jfAvgSUUgHTjhzsPO0/Ww5a/Kz2ehXW27aJxj/QPLfYR2LmTMbQKm3WpB8P1LjoiU7zjPoVoZ43a4P2JLUDidGKCd3eY5b5xewz

key #2:
2048 MD5:f7:98:f1:0b:73:c6:2a:21:00:7a:70:1d:0f:cf:d8:cc no comment (RSA)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCQsZrjwKjB4WnE4SwVdDX5eEMxKzPHFBVKKpo9vvWUXRQwdTZy6iVOkyF26IPR+xDPzslzXOClKXUrWEh6La/EMpRwuMrWAbMIJFeDHOb56q4azgopoJmMJHo0yxGu0Ts4XszMACYRhlG6uK2AP5SYiOTp1zKPFjazXAdwLXyOvJurzy6KKuGJdSs/sj9+4uehgyRNOhehCSfg71tJJYwRvO2DDfLgaVEKOgZx58gEnJfhhz9D7rbvdZNhw/hCgtVNJaQF9Mdke2OPwWSo8i0/XNb9Bu/GRXqwMZrxDBhyzieocW40cwuzxWfzoi03aISdtQ1HtawH8+/sswviM1+B

1
ssh-keygen -r host.name.com

sshd 인스턴스에서 구성된 모든 공개 키의 지문을 출력합니다.

그런 다음 DNS SSHFP 레코드에 넣을 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.