คำเตือน“ การระบุโฮสต์ระยะไกลเปลี่ยนไป” เมื่อเชื่อมต่อผ่าน SSH


21

ฉันได้รับข้อความนี้วันนี้เมื่อพยายามลงชื่อเข้าใช้เซิร์ฟเวอร์ของฉัน ฉันควรทำอย่างไร? เกิดอะไรขึ้น?

$ ssh 10.10.10.69
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
3d:1b:02:9e:b2:b8:f0:f7:c6:4f:94:96:f6:e3:c0:d1.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:8
RSA host key for 10.10.10.69 has changed and you have requested strict checking.Host key verification failed.

2
นอกเหนือจากนี้คุณอาจต้องการหลีกเลี่ยงการเข้าสู่ระบบในเครื่องและจากระยะไกลในฐานะผู้ใช้รากและใช้ผู้ใช้ที่ไม่มีสิทธิ์ร่วมกับ sudo แทน
Steve Beattie

คำตอบ:


12

คุณเพิ่งติดตั้งระบบปฏิบัติการใหม่บนเซิร์ฟเวอร์ของคุณหรืออะไรทำนองนั้น? นั่นจะทำให้เกิดสิ่งนี้

ในการแก้ไขปัญหานี้: http://www.cyberciti.biz/faq/warning-remote-host-identification-has-changed-error-and-solution/

โซลูชัน # 1: ลบคีย์โดยใช้ ssh-keygen

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

$ ssh-keygen -R {server.name.com}
$ ssh-keygen -R {ssh.server.ip.address}
$ ssh-keygen -R {ssh.server.ip.address} -f {/path/to/known_hosts}
$ ssh-keygen -R server.example.com

ตอนนี้คุณสามารถเชื่อมต่อกับโฮสต์ได้โดยไม่มีปัญหา

โซลูชัน # 2: เพิ่มโฮสต์คีย์ที่ถูกต้องใน /home/user/.ssh/known_hosts

ไม่จำเป็นต้องลบไฟล์ known_hosts ทั้งหมดเพียงแค่บรรทัดที่ละเมิดในไฟล์นั้น ตัวอย่างเช่นถ้าคุณมี 3 เซิร์ฟเวอร์ดังต่อไปนี้

myserver1.com,64.2.5.111 ssh-rsa  
 AAAAB3NzaC1yc2EAAAABIwAAAIEA11FV0EnGahT2EK8qElocjuHTsu1jaCfxkyIgBTlxlrOIRchb2pw8IzJLOs2bcuYYfa8nSXGEcWyaFD1ifUjfHelj94AAAAB3NzaC1yc2EAAAABIwAAAIEA11FV0E
nGahT2EK8qElocjuHTsu1jaCfxkyIgBTlxlrOIRchb2pw8IzJLOs2bcuYYfa8nSXGEcWyaFD1ifUjfHelj94H+uv304/ZDz6xZb9ZWsdm+264qReImZzruAKxnwTo4dcHkgKXKHeefnBKyEvvp/2ExMV9WT5DVe1viVw
    k=
    myserver2.com,125.1.12.5 ssh-rsa
 AAAAB3NzaC1yc2EAAAABIwAAAQEAtDiERucsZzJGx/1kUNIOYhJbczbZHN2Z1gCnTjvO/0mO2R6KiQUP4hOdLppIUc9GNvlp1kGc3w7B9tREH6kghXFiBjrIn6VzUO4uwrnsMbnAnscD5EktgI7fG4ZcNUP 5+J7sa3o+rtmOuiFxCA690DXUJ8nX8yDHaJfzMUTKTGxQz4M/H2P8L2R//qLj5s3ofzNmgSM9lSEhZL/IyI4NxHhhpltYZKW/Qz4M/H2P8L2R//qLj5s3ofzNmgSM9lSEhZL/M7L0vKeTObue1SgAsXADtK3162a/Z6MGnAazIviHBldxtGrFwvEnk82+GznkO3IBZt5vOK2heBnqQBf
    w=
    myserver3.com,125.2.1.15 ssh-rsa 
 5+J7sa3o+rtmOuiFxCA690DXUJ8nX8yDHaJfzMUTKTGx0lVkphVsvYD5hJzm0eKHv+oUXRT9v+QMIL+um/IyI4NxHhhpltYZKW
 as3533dka//sd33433////44632Z6MGnAazIviHBldxtGrFwvEnk82/Qz4M/H2P8L2R//qLj5s3ofzNmgSM9lSEhZL/M7L0vKeTObue1SgAsXADtK3162a/Z6MGnAazIviHBldxtGrFwvEnk82+GznkO3IBZt5vOK2heBnqQBfw==

หากต้องการลบเซิร์ฟเวอร์ที่สอง (myserver.com) ให้เปิดไฟล์:

# vi +2 .ssh/known_hosts

และกดคำสั่ง dd เพื่อลบบรรทัด บันทึกและปิดไฟล์ หรือใช้ดังต่อไปนี้

$ vi ~/.ssh/known_hosts

ตอนนี้ไปที่บรรทัด # 2 พิมพ์คำสั่งต่อไปนี้

:2

ตอนนี้ลบบรรทัดด้วย dd และออก:

dd
:wq

หรือคุณสามารถใช้คำสั่ง sed ดังต่อไปนี้เพื่อลบรหัสที่กระทำผิดที่บรรทัดที่ 44:

$ sed -i 44d ~/.ssh/known_hosts

โซลูชันที่ 3: เพียงลบไฟล์ known_hosts หากคุณมีเซิร์ฟเวอร์ ssh เพียงหนึ่งตัว

$ cd
$ rm .ssh/known_hosts
$ ssh ras.mydomain.com

ลองเชื่อมต่อกับ ssh อีกครั้ง
ตอนนี้คุณควรจะสามารถเชื่อมต่อเซิร์ฟเวอร์ของคุณผ่าน ssh:

ssh username@server-ip-here
ssh nixcraft@server1.cyberciti.biz

ถัดไปคุณจะได้รับพรอมต์ใหม่เพื่อเพิ่มรหัส~/.ssh/known_hostsดังต่อไปนี้:

The authenticity of host '10.86.115.66 ()' can't be established.
ECDSA key fingerprint is 4e:10:42:39:53:85:7f:89:89:dc:89:84:8d:79:e7:ed.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.86.115.66' (ECDSA) to the list of known hosts.

9
โปรดทราบว่าหากคุณไม่ได้เปลี่ยนคีย์โฮสต์ SSH ของเซิร์ฟเวอร์คุณไม่ควรแทนที่สำเนาโฮสต์คีย์ของคุณเนื่องจากอาจเป็นสัญญาณว่ามีคนพยายามทำลายการสื่อสารของคุณด้วยการโจมตีแบบคนกลาง
Kees Cook

7

จากสิ่งที่ฉันสามารถบอกได้คำตอบทั้งหมดเหล่านี้เกี่ยวกับการยับยั้งคำเตือนแทนที่จะจัดการกับมัน ในระยะสั้นคำเตือนจะบอกคุณว่าเซิร์ฟเวอร์ดูไม่เหมือนที่เคยมอง ดูhttps://en.wikipedia.org/wiki/Man_in_the_middle_attackเพราะเหตุนี้อาจเป็นอันตราย

อ่านman sshโดยเฉพาะในส่วนนี้:

ตรวจสอบกุญแจโฮสต์

เมื่อเชื่อมต่อกับเซิร์ฟเวอร์เป็นครั้งแรกลายนิ้วมือของคีย์สาธารณะของเซิร์ฟเวอร์จะปรากฏต่อผู้ใช้ (ยกเว้นว่าตัวเลือกStrictHostKeyCheckingถูกปิดใช้งาน) สามารถระบุลายนิ้วมือโดยใช้ssh-keygen (1) :

   $ ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key

เพื่อความปลอดภัยคุณ (หรือคนที่คุณไว้วางใจ) ควรรันคำสั่งนี้ก่อนบนเซิร์ฟเวอร์ที่คุณกำลังเชื่อมต่อ มันจะให้ลายนิ้วมือที่ดูคล้ายกับที่ให้ไว้ในคำเตือนในคำถาม แน่นอนว่าคุณมักจะไม่มีข้อมูลนี้ แต่ถ้าคุณมีเหตุให้สงสัยว่ามีบางอย่างกำลังทำงานอยู่การรันคำสั่งนั้นเป็นวิธีการตรวจสอบว่าเซิร์ฟเวอร์มีการเปลี่ยนแปลงจริง ๆ หรือมีสิ่งที่น่าสงสัยเกิดขึ้นหรือไม่


1
ใช้สิ่งนี้หากโฮสต์ของคุณมีลายนิ้วมือ sha256 แทนที่จะเป็น md5 แฮช ssh -o FingerprintHash=md5 example.org
Declan McKenna

1
ข้อมูลเพิ่มเติมเกี่ยวกับ FingerprintHash: superuser.com/questions/929566/… (เช่นควรใช้ sha256 แต่คุณอาจไม่รู้ค่านั้นถ้าคุณยังไม่ได้อัพเกรดเร็วพอ)
unhammer

2

ฉันประสบปัญหาเดียวกันและหากคุณไม่ต้องการลบknown_hostsไฟล์ทั้งหมดคุณสามารถดำเนินการคำสั่งต่อไปนี้:

ssh-keygen -R 10.10.10.69

ไม่มีปัญหาในการลบ known_hosts คุณจะต้องเพิ่มแต่ละเซิร์ฟเวอร์ที่คุณเชื่อมต่อไปยังรายการทุกครั้งที่คุณเชื่อมต่อ อาจทำให้สคริปของคุณเกินไปเนื่องจากโฮสต์ยังไม่น่าเชื่อถือ การแจ้งเตือนเกิดขึ้นเมื่อลายเซ็นของโฮสต์ (คอมพิวเตอร์ที่คุณพยายามเชื่อมต่อกับคีย์ใหม่ที่สร้างขึ้นเนื่องจากการติดตั้งใหม่หรือการหมุนของคีย์)


0

หากคุณเชื่อว่าการเตือนเป็นเท็จคุณสามารถลบ / root / ssh / known_hosts ของคุณเพื่อเริ่มการตรวจสอบใหม่


3
โปรดอย่าทำเช่นนี้คุณจะสูญเสียโฮสต์ที่รู้จักอื่น ๆ แต่ถ้าคุณแน่ใจว่ามันเป็นค่าบวกให้ลบบรรทัดเฉพาะ: "known_hosts: 8" บรรทัด 8 ในกรณีนี้
Roger Light

0

หากคุณเพิ่งติดตั้งเซิร์ฟเวอร์ใหม่หรือเปลี่ยนรหัสโฮสต์อาจปลอดภัยที่จะลบบรรทัด 8 ออกจากไฟล์ ~ / .ssh / known_hosts ของคุณและเพิ่มเซิร์ฟเวอร์อีกครั้ง (โดย ssh'ing และตอบ "ใช่ "เมื่อขอการยืนยันที่สำคัญ)


0

เนื่องจากเซิร์ฟเวอร์ของคุณอยู่ในเครือข่ายท้องถิ่นคุณจึงมั่นใจได้เลยทีเดียว

หากคุณติดตั้งระบบของคุณใหม่นี่เป็นเรื่องปกติ แต่แทนที่จะลบไฟล์ known_hosts ของคุณฉันขอแนะนำให้ทำ echo "" > ~/.ssh/known_hosts


ผู้คนยังสามารถเล่นลูกเล่นบนเครือข่ายท้องถิ่น เครือข่ายธุรกิจหรือโรงเรียนอาจมีห้องมากมายที่ไม่น่าเชื่อถือ
Azendale


0

คัดลอกบรรทัดนี้ แต่ใส่ชื่อผู้ใช้และชื่อโฮสต์ / IP สำหรับuserและremote-server:

ssh-keygen -f "/home/user/.ssh/known_hosts" -R remote-server

ตัวอย่างเช่น:

ssh-keygen -f "/home/dev1/.ssh/known_hosts" -R 192.168.199.108

และวางลงบนเทอร์มินัลท้องถิ่นของคุณและเรียกใช้ สิ่งนี้ใช้ได้สำหรับฉัน


0

บนโหนดไคลเอ็นต์ที่คุณกำลังออก ssh

vi ~/.ssh/known_hosts

ลบทุกบรรทัดที่ขึ้นต้นด้วยที่อยู่ IP ที่อยู่ในเครือข่ายเดียวกับ IP ที่คุณพยายามจะใช้ สิ่งนี้จะบังคับให้ไคลเอ็นต์โหนดเพิ่มอย่างต่อเนื่อง (ECDSA) ไปยังรายการโฮสต์ที่รู้จัก

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