ปัญหาการเชื่อมต่อ SSH กับข้อผิดพลาด“ การตรวจสอบคีย์โฮสต์ล้มเหลว…”


179

ฉันสามารถเชื่อมต่อกับเครื่อง Ubuntu อื่นใน LAN ของฉันผ่าน SSH ในพีซีทั้งสองเครื่องฉันติดตั้งopenssh-server แต่จากคอมพิวเตอร์ Ubuntu เครื่องอื่นฉันไม่สามารถเชื่อมต่อกับพีซีผ่าน SSH และฉันได้รับข้อผิดพลาดนี้:

การยืนยันคีย์โฮสต์ล้มเหลว ...


1
คุณใช้ชื่อโฮสต์หรือที่อยู่ IP หรือไม่
Thorbjørn Ravn Andersen

ไม่คล้ายกัน แต่ฉันได้รับข้อผิดพลาดเดียวกัน แต่เนื่องจากปัญหาที่แตกต่าง: serverfault.com/questions/494916/ …
zengr

นี่ไม่ใช่ปัญหาเฉพาะของ Ubuntu สามารถเกิดขึ้นกับสิ่งใดก็ได้sshจากบรรทัดคำสั่ง
MarkHu

คำตอบ:


216

"การยืนยันรหัสโฮสต์ล้มเหลว" หมายความว่ารหัสโฮสต์ของโฮสต์ระยะไกลมีการเปลี่ยนแปลง

ร้านค้า SSH ~/.ssh/known_hostsคีย์โฮสต์ของโฮสต์ระยะไกลใน คุณสามารถแก้ไขไฟล์ข้อความนั้นด้วยตนเองและลบคีย์เก่า (คุณสามารถดูหมายเลขบรรทัดในข้อความแสดงข้อผิดพลาด) หรือใช้

ssh-keygen -R hostname

จากหน้าคน :

-R hostname
ลบคีย์ทั้งหมดที่เป็นของชื่อโฮสต์ออกจากไฟล์ known_hosts ตัวเลือกนี้มีประโยชน์ในการลบโฮสต์ที่ถูกแฮช

(ซึ่งฉันได้เรียนรู้จากคำตอบถึง เป็นไปได้หรือไม่ที่จะลบคีย์โฮสต์เฉพาะออกจากไฟล์ known_hosts ของ SSH? )


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

หากคุณกำลังทำงานในบางสถานการณ์ระยะไกล / การเขียนสคริปต์ที่คุณไม่มีการเข้าถึงแบบโต้ตอบไปยังพร้อมท์เพื่อเพิ่มโฮสต์คีย์ให้หลีกเลี่ยงดังนี้:

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

คำเตือน: เพิ่ม 'something.example.com, 10.11.12.13' (RSA) ลงในรายการโฮสต์ที่รู้จักอย่างถาวร


6
+1 นี่เป็นวิธีแก้ปัญหาที่น่าเกลียด แต่ในบางกรณีของกระบวนการตรวจสอบอัตโนมัติที่ทำงานกับอุปกรณ์เชื่อมต่อ ip แบบ dymaic นี่เป็นวิธีที่ง่ายและยอมรับได้
Ninsuo

11
+1 ตัวอย่างเช่นสำหรับการประหารชีวิตเจนกินส์นี่เป็นทางออกที่ดี ขอบคุณ
Lobo

5
@Lobo ไม่สามารถตกลงได้อีกต่อไปฉันใช้มันกับเจนกินส์ซึ่งเท่ห์มากsh """ssh -o StrictHostKeyChecking=No ec2-user@someIpAddress-e2e sudo service tomcat restart"""
prayagupd

ช่วยชีวิตฉันไว้. โซลูชั่นช่วยชีวิต
user1735921

10

บางครั้งก็มีสถานการณ์เมื่อคุณทำงานบนคอนโซลแบบอนุกรมจากนั้นการตรวจสอบคำสั่งด้านบนในโหมด verbose -vจะแสดงว่าคุณ/dev/ttyไม่มีอยู่ในขณะที่มันทำ

ssh -v user@hostname

ในกรณีดังกล่าวข้างต้นเป็นเพียงแค่ลบ/dev/ttyและสร้าง symlink ของการ/dev/ttyS0/dev/tty

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

เป็นทางเลือกให้เพิ่มid_rsa.pubไปยังตำแหน่งรีโมตดังนั้นรหัสผ่านจะไม่ได้รับพร้อมต์และคุณได้รับการเข้าถึงล็อกอิน


6
+1 สำหรับการแนะนำให้ใช้พารามิเตอร์ -v; สิ่งนี้สามารถช่วยได้มากเมื่อทำการดีบักปัญหา ssh
daniel 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-serverกับพีซีของคุณจากนั้นควรทำงานอย่างถูกต้อง มันจะรีเซ็ตการกำหนดค่าสำหรับ openssh และควรกลับมาที่การตรวจสอบรหัสผ่านเริ่มต้น

ความเป็นไปได้ที่สองคือมีคีย์สำหรับอูบุนตูอื่นในพีซีของคุณอยู่แล้วและมันก็เปลี่ยนไปซึ่งจะไม่ถูกจดจำอีกต่อไป ในกรณีนี้คุณจะต้องแก้ไขไฟล์.ssh/authorized_keysเพื่อลบบรรทัดปัญหาที่ระบุอูบุนตูของคุณ


3

นี่เป็นหัวข้อเก่าและฉันเพิ่งพบคำตอบนี้ฉันจะเพิ่มสิ่งที่ฉันทำเพื่อแก้ปัญหานี้

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

ฉันเพิ่งดูข้อความแสดงข้อผิดพลาดที่มันขว้างใส่ฉันและมันบอกว่าให้เรียกใช้คำสั่งนั้นเพื่อลบมันออกจากรายการโฮสต์ หลังจากนั้นฉันทำสิ่งต่อไปนี้:

ssh-copy-id HOSTNAME

กว่าที่ฉันทำตามคำแนะนำจากที่นั่นจนกว่าฉันจะสามารถ ssh ลงในเซิร์ฟเวอร์


ตามคำสั่งนี้ฉันได้รับข้อเสนอแนะใน Ubuntu 12.4
MaNKuR

2

หมายความว่ารีโมตโฮสต์คีย์ของคุณถูกเปลี่ยน (อาจเป็นการเปลี่ยนรหัสผ่านโฮสต์)

เทอร์มินัลของคุณแนะนำให้รันคำสั่งนี้ในฐานะผู้ใช้รูท

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

คุณต้องลบชื่อโฮสต์นั้นออกจากรายการโฮสต์บนพีซี / เซิร์ฟเวอร์ของคุณ คัดลอกคำสั่งที่แนะนำและดำเนินการในฐานะผู้ใช้รูท

$ 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

คุณควรเปลี่ยนคีย์ด้วยวิธีนี้: จากข้อผิดพลาดที่ระบุให้ค้นหาว่าคีย์โฮสต์ใดที่เปลี่ยนไปเช่น: การละเมิดคีย์ ECDSA ใน /Users/user-name/.ssh/known_hosts/5 กล่าวว่าคีย์ที่ 5 เปลี่ยนไปดังนี้:

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

ข้อสังเกต: คุณต้องเป็นรูทหรือมีสิทธิ์ใช้ sudo


ไม่เว้นแต่ว่าคุณกำลังทำเพื่อคนอื่นมันไม่จำเป็นต้องใช้รูทหรือ sudo คุณกำลังแก้ไขไฟล์ในไดเรกทอรีบ้านของคุณ ประการที่สอง: สำหรับคำสั่งในการทำงานจำเป็นต้องมี GNU sed
techraf

บางทีคุณอาจถูก แต่ฉันพยายาม ssh จาก Mac OSX ไปยัง ubuntu-server และฉันต้องทำอย่างนั้น ขอบคุณสำหรับความคิดเห็นของคุณ
Amir.AG

1

คุณต้องใส่คีย์ rsa ของโฮสต์เป้าหมายลงในโฮสต์ต้นทาง/home/user/.ssh/known_hostsโดยรันสิ่งนี้บนเป้าหมาย

ssh-keyscan -t rsa @targethost

1

อาจเป็นเพราะคุณต้องป้อน "ใช่" เมื่อยืนยันว่าคุณต้องการเชื่อมต่อต่อ

ชอบร้อง

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.

หากคุณอ่านบันทึกอย่างละเอียดมากขึ้นคุณจะเห็นว่ากุญแจที่คุณได้รับจากโฮสต์นั้นขัดแย้งกับกุญแจที่คุณมีอยู่ - ในกรณีนี้มันอยู่ในบรรทัดที่ 74 ของไฟล์ known_hosts (คีย์ ECDSA ที่ละเมิดใน / var / ราก / .ssh / known_hosts: 74) ลบบรรทัดออกจาก known_hosts บันทึกการเปลี่ยนแปลงและเชื่อมต่อใหม่


-1
chmod 666 /dev/tty 

เป็นอีกวิธีการแก้ปัญหา tty - บางครั้งไฟล์อุปกรณ์นี้มีสิทธิ์ที่ไม่ถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.