클라이언트와 서버에서 공개 키와 개인 키, 구성 파일을 일치시키려고 했지만 불일치를 해결할 수 없었습니다. SSH를 통해 서버에 성공적으로 연결할 수 있습니다하지만불일치 상황. 이건 좀 걱정스럽습니다.
어디에 무엇이 저장되어 있는지 정확하게 보여드리겠습니다.
클라이언트: Mac 서버: Ubuntu(AWS에서 호스팅)
내 로컬 Mac의 /Users/sm/.ssh 디렉토리에 있는 파일
ls -la
Sanjays-iMac:.ssh sm$ ls -la
total 24
drwx------ 5 sm staff 160 26 Nov 21:29 .
drwxr-xr-x+ 59 sm staff 1888 26 Nov 21:29 ..
-rw------- 1 sm staff 1696 26 Nov 20:49 id_rsa
-rw-r--r--@ 1 sm staff 451 26 Nov 20:50 id_rsa.pub
-rw-r--r-- 1 sm staff 1151 26 Nov 21:08 known_hosts
내 우분투 서버의 파일:
ubuntu@ip-172-31-30-19:~/.ssh$ ls -la
total 12
drwx------ 2 ubuntu ubuntu 4096 Nov 26 14:37 .
drwxr-xr-x 8 ubuntu ubuntu 4096 Oct 30 18:02 ..
-rw------- 1 ubuntu ubuntu 391 May 25 2018 authorized_keys
Ubuntu의 현재 작업 디렉터리:
ubuntu@ip-172-31-30-19:~/.ssh$ pwd
/home/ubuntu/.ssh
authorized_keys
서버의 파일 콘텐츠:
ubuntu@ip-172-31-30-19:~/.ssh$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA....0g1bMv+p11K8MDH sanjaydev
(개인정보 보호를 위해 내용이 잘렸습니다.)
마찬가지로 로컬 서버에 Known_hosts 파일이 있습니다.
Sanjays-iMac:.ssh sm$ cat known_hosts
54.251.104.13 ecdsa-sha2-nistp256 AAAAE2VjZHNhLX..Xsb/RBY=
52.76.85.25 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTI....hAkfLOc5g=
ec2-13-127-241-121.ap-south-1.compute.amazonaws.com,13.127.241.121 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXN....fu5Co4vYB0=
ec2-13-232-81-251.ap-south-1.compute.amazonaws.com,13.232.81.251 ecdsa-sha2-nistp256 AAAAE2VjZHNhL....nhNcRyfu5Co4vYB0=
35.154.168.85 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNo....NcRyfu5Co4vYB0=
13.126.30.42 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTIt....NcRyfu5Co4vYB0=
(개인정보 보호를 위해 내용이 잘렸습니다.)
이제 내 질문은 다음과 같습니다.
무엇이 무엇과 같아야 합니까?
클라이언트의 공개 키는 authorised_keys
서버에 있는 파일의 항목 중 하나와 일치해야 하고, 서버의 공개 키는 known_hosts
클라이언트에 있는 파일의 항목 중 하나와 일치해야 한다고 생각합니다.
안타깝게도 수동으로 일치시키려고 하면 정확히 일치하지 않습니다(처음 몇 문자만 일치함). -i <pemfile>
명령줄에 이를 지정하지 않고도 ssh 연결이 계속 이루어진다는 점은 주목할 가치가 있습니다 .
답변1
키에는 두 가지 유형이 있습니다.섬기는 사람또는주인사용자에게 서버를 식별하는 키사용자로그인을 허용하는 키입니다.
서버의 개인 호스트 키는 에 저장됩니다 /etc/ssh/
. 해당 공개 키는 프롬프트 후 자동으로 known_hosts
클라이언트 에 추가됩니다 ~/.ssh
. 이러한 키의 목적은 중간자(MITM) 공격을 탐지하는 것입니다. ssh ...
평소처럼 입력하는 동안 호스트 키가 갑자기 변경되고 서버에 아무 것도 변경되지 않은 경우 의심스러워야 합니다.
일반적으로 호스트 키는 신경 쓸 필요가 없으며 자동으로 관리됩니다.
사용자 키를 사용하면 비밀번호를 입력하지 않고도 인증할 수 있습니다. 사용자 키는 클라이언트에서 관리됩니다. id_rsa.pub
공개 키와 개인 키로 구성된 키 쌍을 생성했습니다 id_rsa
. 공개 키 는 ~/.ssh
사용되지 않으며 필요할 때 사용할 수 있도록 저장됩니다. ~/.ssh/authorized_keys
서버에 있는 해당 사용자의 공개 키 에 공개 키를 수동으로 추가해야 합니다 . 한 줄에 하나의 키가 필요합니다. authorized_keys
파일이 비어 있으면 복사본(예: 비밀번호 scp
및 비밀번호) 이면 id_rsa.pub
충분합니다.
따라서 귀하의 경우에는
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA....0g1bMv+p11K8MDH sanjaydev
Ubuntu 서버에 있는 파일의 키는 Mac에 있는 키 authorized_keys
와 동일해야 합니다 .id_rsa.pub
동일하지만 여전히 로그인할 수 없다면 또 다른 문제가 있는 것입니다.
답변2
키 형식의 재미
다른 답변에 나열한 의견을 보면 심각한 형식 문제가 있는 것 같습니다.
하나의 표준화된 절차를 사용하여 생성된 암호화 키가 다른 표준화된 절차에 의해 생성된 키와 수학적으로 동일하다는 것은 사실입니다. 그러나 특정 암호화 프로토콜에는 특정 형식의 키가 필요합니다.
전환 키
- openssl에서 SSH 키로
PEM 형식으로 생성되고 openssl
내보낸 키는 이 프로그램을 사용하여 SSH 형식으로 변환할 수 있습니다 ssh-keygen
.
ssh-keygen -i -m pem -f key.pem
- PEM에 대한 SSH 키
ssh-keygen을 사용하여 생성된 키는 PEM 형식으로 변환될 수 있습니다.
ssh-keygen -e -m pem -f id_rsa.pub
- PGP에서 SSH 키로
GPG에서 생성된 PGP 키는 다음 옵션을 사용하여 SSH 형식으로 변환할 수 있습니다 --export-ssh-key
.
gpg --export-ssh-key <keyid>
주요 위치
다른 답변에 나열된 것처럼 원격 시스템에는 ssh 형식의 파일에 저장된 공개 키가 필요합니다 ~/.ssh/authorized_keys
. 로컬 시스템에서는 다음과 같은 개인 키가 필요합니다.
- id_rsa로 저장됨
~/.ssh
또는
ssh -i
옵션과 함께 사용 가능
또는
- 다음을 사용하여 SSH 에이전트에 추가
ssh-add
또는
sshcontrol
GPG를 사용하여 SSH 에이전트에 파일 추가
공개 키 비교
공개 키를 비교하려면 키의 형식이 동일해야 합니다. 그렇지 않으면 키가 수학적으로 동일한 객체라도 동일하게 보이지 않습니다. 따라서 PEM 형식을 사용하여 SSH 공개키를 생성했다고 표시했으므로 openssl
해당 공개키가 서버 파일에 저장된 공개키와 다를 가능성이 있습니다 ~/.ssh/authorized_keys
.
PEM 형식 키는 다음과 같습니다.
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAr/CvdghgkYT1Z38d
...
NlBcCYnrjvfFAj5HQydWc9CfP02rdtCIewIDAQAB
-----END RSA PUBLIC KEY-----
SSH 공개 키는 다음과 같습니다.
ssh-rsa AAAAB3N...voZypjC/Y2UFwJie...t20Ih7
PGP 공개 키는 다음과 같습니다.
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFN/ZjIBCADad3mv...
...
nE42ZvKt632ZAQ==
=EKbR
-----END PGP PUBLIC KEY BLOCK-----
따라서 동일한 형식의 키를 비교하고 있는지 확인하십시오.
답변3
서버 의 sshd 키 known_hosts
- in/etc/ssh/*pub
답변4
파일 authorized_keys
에는 내용을 포함하는 줄이 있어야 하며 id_rsa.pub
, known_hosts
파일에는 서버의 호스트 키를 포함하는 줄이 있어야 합니다. (서버는 일반적으로 호스트 키를 아래의 파일에 저장합니다 /etc/ssh/
.)
또한 키 쌍이어야 한다는 id_rsa
점에서 일치 항목이 있어야 하지만 수동으로 해제하지 않는 한 ssh-keygen은 항상 키 쌍을 배치합니다.id_rsa.pub