“호스트 키 확인에 실패했습니다…”오류가있는 SSH 연결 문제


179

SSH를 통해 LAN의 다른 Ubuntu 시스템에 연결할 수 있습니다. 두 PC 모두에서 openssh-server를 설치 했지만 다른 Ubuntu 컴퓨터에서 SSH를 통해 PC에 연결할 수 없으며이 오류가 발생했습니다.

호스트 키 확인에 실패했습니다 ...


1
호스트 이름이나 IP 주소를 사용하십니까?
Thorbjørn Ravn Andersen 13:27에

비슷하지는 않지만 같은 오류가 발생했지만 다른 문제로 인해 serverfault.com/questions/494916/…
zengr

이것은 우분투 특정 문제가 아닙니다. ssh명령 행에서 발생할 수 있습니다.
MarkHu

답변:


216

"호스트 키 확인 실패" 는 원격 호스트 의 호스트 키가 변경 되었음을 의미합니다 .

SSH는 원격 호스트의 호스트 키를에 저장합니다 ~/.ssh/known_hosts. 해당 텍스트 파일을 수동으로 편집하고 이전 키를 제거하거나 (오류 메시지에 줄 번호가 표시됨)

ssh-keygen -R hostname

에서 man 페이지 :

-R hostname
known_hosts 파일에서 호스트 이름에 속하는 모든 키를 제거합니다. 이 옵션은 해시 된 호스트를 삭제하는 데 유용합니다.

(나는 SSH의 known_hosts 파일에서 특정 호스트 키를 제거 할 수 있습니까? )에 대한 답변에서 배웠습니다 .


4
또한 원격 호스트의 호스트 키가 없다는 의미 일 수도 있습니다. 예를 들면, 나는 경우 rm ~/.ssh/*, 다음 ssh -o BatchMode=yes root@somewhere아무것도 잘못하지 않는 경우, 내가 얻을 것 Host key verification failed. 같은 오류가 발생 스크립트 회원님이 항상 대화 형 있다면 중요하지만 관련.
Ron Burk

의외로, ssh-keygen -R example.net:7999수율 Host example.net:7999 not found in known_hosts.
alex

known_hosts파일을 제거 하고 다시 ssh. 효과가있었습니다.
ParisaN

파일 ~/.ssh/known_hosts을 읽을 수 없음
João Pimentel Ferreira

128

prompt-to-add-hostkey에 대화식으로 액세스 할 수없는 특정 원격 / 스크립팅 상황에서 실행중인 경우 다음과 같이 해결하십시오.

$ ssh -o StrictHostKeyChecking=no user@something.example.com uptime

경고 : 알려진 호스트 목록에 'something.example.com, 10.11.12.13'(RSA)을 영구적으로 추가했습니다.


6
+1, 이것은 못생긴 솔루션이지만 동적 IP 연결 장치와 작동하는 자동화 된 모니터링 프로세스의 경우 간단하고 수용 가능한 솔루션입니다.
Ninsuo

11
+1 예를 들어 Jenkins 실행의 경우 좋은 솔루션입니다. 감사합니다
Lobo

5
@Lobo이 더 동의 할 수 나는 멋진 인 젠킨스를 위해 그것을 사용하고sh """ssh -o StrictHostKeyChecking=No ec2-user@someIpAddress-e2e sudo service tomcat restart"""
prayagupd가

내 생명을 구했습니다. 생명의 은인 솔루션.
user1735921

10

또한 직렬 콘솔에서 작업 할 때 상황이있는 경우 상세 모드에서 위 명령을 확인 -v하면 /dev/tty존재하지 않는 것으로 표시됩니다 .

ssh -v user@hostname

위의 경우 바로 제거 /dev/tty와의 심볼릭 링크 생성 /dev/ttyS0에를 /dev/tty.

rm /dev/tty
ln -s /dev/ttyS0 /dev/tty

다른 방법으로, id_rsa.pub원격 위치에 추가 하면 암호가 프롬프트되지 않고 로그인 액세스가 가능합니다.


6
-v 매개 변수 사용을 권고하는 +1; 이것은 ssh 문제를 디버깅 할 때 많은 도움이 될 수 있습니다.
다니엘 kullmann

8

필자의 경우 이것은 udev 문제로 인한 것 /dev/tty입니다. 장치 노드 가 없었습니다 . 나를위한 해결책은 다음과 같습니다.

sudo mknod -m 666 /dev/tty c 5 0

6

터미널에서 :

ssh -o StrictHostKeyChecking=no -i YourPublicKey.pem user@example.com uptime

다음과 같은 메시지가 나타납니다.

Warning: Permanently added 'example.com, XX.XXX.XXX.XX' (ECDSA) to the list of known hosts.
 00:47:37 up 3 min,  0 users,  load average: 0.00, 0.00, 0.00

그런 다음 평소와 같이 EC2에 연결하십시오.

ssh -i YourPublickey.pem user@example.com

당신이 command-line line 0: Bad yes/no/ask argument.'아니오'대신 '아니오'를 잘못 사용했기 때문에 알 수 있습니다StrictHostKeyChecking
Axel Bregnsbo

3

두 번째 우분투는 암호가 아닌 키로 연결해야하기 때문입니다.

sudo dpkg-reconfigure openssh-serverPC에서 사용 하는 것이 좋습니다 . 그러면 제대로 작동합니다. openssh의 구성을 재설정하고 기본 비밀번호 인증으로 돌아와야합니다.

두 번째 가능성은 PC에 다른 우분투의 키가 이미 있으며 더 이상 인식되지 않는 것입니다. 이 경우 파일 .ssh/authorized_keys을 편집 하여 우분투를 식별하는 문제가있는 줄을 제거해야합니다.


3

이것은 오래된 스레드이며 방금이 답변을 가로 질러 나갔습니다.이 문제를 해결하기 위해 수행 한 작업을 추가 할 것입니다.

ssh-keygen -f "/home/USER/.ssh/known_hosts" -R HOSTNAME

방금 나에게 던진 오류 메시지를보고 호스트 목록에서 제거하기 위해 해당 명령을 실행한다고 말했습니다. 그 후 나는 다음을 수행했다.

ssh-copy-id HOSTNAME

내가 서버에 ssh 할 수있을 때까지 거기에서 프롬프트를 따랐던 것보다.


이 명령으로 우분투 12.4에서 제안을 받고 있습니다.
MaNKuR

2

원격 호스트 키가 변경되었음을 의미합니다 (호스트 비밀번호 변경 일 수 있음).

터미널은이 명령을 루트 사용자로 실행하도록 제안했습니다

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231

PC / 서버의 호스트 목록에서 해당 호스트 이름을 제거해야합니다. 제안 된 명령을 복사하고 루트 사용자로 실행하십시오.

$ sudo su                                                            // Login as a root user

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231   // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

$ exit                                                               // Exist from root user

$ sudo ssh root@www.website.net -p 4231                              // Try again

이것이 효과가 있기를 바랍니다.


1

이 방법으로 키를 변경해야합니다. 주어진 오류에서 어떤 호스트 키가 변경되었는지 찾으십시오. 예를 들면 다음과 같습니다.

sed -i '5d' ~/.ssh/known_hosts

주의 : 루트 권한이 있거나 sudo에 대한 권한이 있어야합니다.


아니요, 다른 사람을 위해하지 않는 한 루트 나 sudo가 필요하지 않습니다. 홈 디렉토리에서 파일을 편집 중입니다. 둘째 : 명령이 작동하려면 GNU sed가 필요합니다.
techraf

어쩌면 당신은 맞지만 Mac OSX에서 우분투 서버로 ssh하려고했지만 그렇게해야합니다. 그건 그렇고 당신의 의견에 감사드립니다.
Amir.AG

1

대상 /home/user/.ssh/known_hosts에서이를 실행 하여 대상 호스트의 rsa 키를 소스 호스트 에 넣어야합니다.

ssh-keyscan -t rsa @targethost

1

ssh가 연결을 계속하고 싶다고 확인하면 "yes"만 입력하면됩니다.

벨로우즈처럼.

The authenticity of host 'xxx' can't be established.
ECDSA key fingerprint is yyy.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxx' (ECDSA) to the list of known hosts.
Enter passphrase for key '/Users/ysy/.ssh/id_rsa':

그런 다음 비밀번호를 입력하십시오.

"연결을 계속 하시겠습니까 (예 / 아니요)? "에주의하십시오. 입력하지 말고 예를 입력해야합니다.


1

호스트 키 검사를 엄격히 비활성화하는 것 외에 다음을 입력하여 연결할 수도 있습니다.

ssh -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no <username@target_machine_ip_or_domain_name>

0

pico ~/.ssh/known_hosts 다시 연결하면 모든 줄을 삭제하고 새 키를 얻습니다.


6
모든 호스트 키를 제거하므로 위험한 솔루션입니다. 허용되는 솔루션 ssh-keygen -R hostname이 더 좋습니다.
msanford

0

내 솔루션은이 블로그 게시물에서 나옵니다 : SSH Secure Shell Client에 대한 알고리즘 협상 실패

다음과 같이 파일을 수정해야합니다.

sudo nano /etc/ssh/sshd_config

그런 다음 다음을 추가하십시오.

# Ciphers
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,arcfour
KexAlgorithms diffie-hellman-group1-sha1

기본적으로 문제를 해결할 수있는 솔루션을 찾을 때까지 다른 솔루션을 시도했습니다. 위의 해결 방법으로 문제가 해결되지 않으면 시도해보십시오. 이 방법으로 문제가 해결되지 않으면 다른 사람을 사용해보십시오.


0

"sudo vi /var/root/.ssh/known_hosts"를 수행하고 연결하려는 호스트의 키를 보유한 라인을 제거하고 다시 연결하십시오.

특정 상황에 대해 모르겠지만 대부분이 오류는 다음과 같은 메시지와 함께 나타납니다.

my_mac:~ oivanche$ sudo ssh pi@192.168.0.45
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:sx1Z4xyGY9venBP6dIHAoBj0VhDOo7TUVCE2xWXpzQk.
Please contact your system administrator.
Add correct host key in /var/root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /var/root/.ssh/known_hosts:74
ECDSA host key for 192.168.0.45 has changed and you have requested strict checking.
Host key verification failed.

로그를주의 깊게 읽으면 호스트에서 얻은 키가 이미 가지고있는 키와 충돌하는 것을 알 수 있습니다.이 경우 known_hosts 파일의 74 행에 있습니다 (/ var /의 ECDSA 키 위반). root / .ssh / known_hosts : 74). known_hosts에서 행을 제거하고 변경 사항을 저장 한 후 다시 연결하십시오.


-1
chmod 666 /dev/tty 

또 다른 tty 솔루션입니다. 때로는이 장치 파일에 잘못된 권한이 있습니다.

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