ตรวจสอบลายนิ้วมือเพื่อรับรหัส ECDSA ที่ส่งโดยโฮสต์ระยะไกล [ปิด]


24

ฉันได้รับข้อความเตือนที่รู้จักกันดีเมื่อพยายาม ssh เข้าสู่เซิร์ฟเวอร์:

$ ssh whateverhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/user/.ssh/known_hosts:10
ECDSA host key for ipofmyhost has changed and you have requested strict checking.
Host key verification failed.

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

ฉันได้ลองทำโดย:

echo -n ipofthehost | sha256sum

แต่ฉันไม่ได้รับลายนิ้วมือเดียวกัน ฉันยังลอง "hostname, ip" ชนิดที่เหมือนกันใน aws แต่ฉันไม่ตรงกัน

ถ้าฉันลบทางเข้าออกจากไฟล์ known_hosts ของฉันและฉันพยายามที่จะ ssh อีกครั้งมันจะประสบความสำเร็จและบอกต่อไปนี้:

ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Are you sure you want to continue connecting (yes/no)? 

ดังนั้นการใช้ sha256sum กับสิ่งที่ได้รับลายนิ้วมือและฉันจะตรวจสอบได้อย่างไร


2
คุณจะไม่สามารถตรวจสอบได้ คุณเขียนมันลงในครั้งแรกที่คุณเริ่ม SSHd และสร้างคีย์และตรวจสอบกับค่าที่ดีที่ทราบ

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

@ user186340 ดูเหมือนว่าเป็นความจริงที่ว่า "คุณเขียนลงครั้งแรกที่คุณเริ่ม SSHd" หากคุณเข้าถึงเครื่องที่ใช้ SSHd คุณสามารถทำได้/etc/ssh/ssh_host_ecdsa_key.pubเพื่อรับลายนิ้วมือ ฉันแค่ทำ
jamadagni

คำตอบ:


12

ลายนิ้วมือกุญแจสาธารณะไม่ได้เป็นแฮชธรรมดาของสตริง IP

ในการดึงกุญแจสาธารณะของโฮสต์ระยะไกลคุณสามารถใช้ssh-keyscan <IP>จากนั้นคุณสามารถใช้เครื่องมือทั่วไปเพื่อแยกลายนิ้วมือ ( ssh-keygen -lf <public_key_file>)

ในที่สุดคุณสามารถเปรียบเทียบกับลายนิ้วมือของคุณในปัจจุบันในไฟล์ที่มีknown_hostsssh-keygen -l -F <domain_or_ip>


2
ฉันสับสนว่าทำไมเมื่อเชื่อมต่อผ่าน SSH และบังคับให้ใช้รหัส ecdsa เป็นครั้งแรก ( ssh -oHostKeyAlgorithms='ecdsa-sha2-nistp256' william@my.server) มันทำให้ฉันมีตัวอักษรและตัวเลขลายนิ้วมือ 43 หลัก ( ECDSA key fingerprint is SHA256:sBKcTiQ5V.... etc.) แต่เมื่อฉันเรียกใช้ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pubฉันจะได้รับเลขฐานสิบหกอักขระ 32 ตัว?
William Turrell

1
@WilliamTurrell สิ่งนี้เกิดขึ้นเนื่องจากเซิร์ฟเวอร์ของคุณต้องมีรุ่นเก่ากว่า (น่าจะเป็น openSSH 6.8) รุ่นเก่าssh-keygen(หรือผู้ให้บริการเซิร์ฟเวอร์ของคุณไม่ได้ติดตามเวลาและยังคงให้แฮช md5 แทน SHA256 ใหม่) มีวิธีแก้ไขปัญหาอยู่ที่นี่: superuser.com/questions/929566
SeldomNeedy

9

รายละเอียดอีกเล็กน้อย : เนื่องจากข้อความเตือนหมายถึงลายนิ้วมือสำหรับคีย์ ECDSA ที่ส่งโดยโฮสต์ระยะไกลเราจึงรวบรวมข้อมูลเกี่ยวกับกุญแจสาธารณะ (ecdsa) ของโฮสต์:

ssh-keyscan -t ecdsa ip_or_hostmane > ecdsa_file_to_compare

จากนั้นเราสามารถหาได้ว่าไฟล์ที่รู้จักในชื่อ public_hosts คือกุญแจสาธารณะ (ecdsa):

ssh-keygen -l -F ipofhost

หากเราต้องการเปรียบเทียบลายนิ้วมือเราต้องใส่เนื้อหาของไฟล์ known_hosts ของเรา (เพียงรายการที่เกี่ยวข้องกับโฮสต์นี้) เราสามารถเรียกมันว่า ecdsa_file_from_known_hosts จากนั้นเปรียบเทียบดังนี้:

ssh-keygen -lf ecdsa_file_to_compare
ssh-keygen -lf ecdsa_file_from_known_hosts

และตรวจสอบว่าแสดงแฮชเดียวกันหรือไม่

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

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