วิธีการลบการตรวจสอบคีย์ RSA ที่เข้มงวดใน SSH และมีปัญหาอะไรที่นี่


42

ฉันมีเซิร์ฟเวอร์ Linux ที่เมื่อใดก็ตามที่ฉันเชื่อมต่อมันจะแสดงข้อความที่เปลี่ยนคีย์โฮสต์ SSH:

$ ssh root @ host1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@ คำเตือน: การระบุตัวตนของโฮสต์ระยะไกลได้เปลี่ยนแล้ว! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@ เป็นไปได้ว่าบางคนกำลังทำสิ่งที่น่ารังเกียจ! บางคนอาจกำลังดักฟังคุณอยู่ในขณะนี้ (การโจมตีแบบคนกลาง)! อาจเป็นไปได้ว่าคีย์โฮสต์ RSA เพิ่งมีการเปลี่ยนแปลง ลายนิ้วมือสำหรับคีย์ RSA ที่ส่งโดยโฮสต์ระยะไกลคือ 93: a2: 1b: 1c: 5f: 3e: 68: 47: bf: 79: 56: 52: f0: ec: 03: 6b กรุณาติดต่อผู้ดูแลระบบของคุณ เพิ่มคีย์โฮสต์ที่ถูกต้องใน /home/emerson/.ssh/known_hosts เพื่อกำจัดข้อความนี้ คีย์ที่ละเมิดใน /home/emerson/.ssh/known_hosts:377

คีย์โฮสต์ RSA สำหรับ host1 มีการเปลี่ยนแปลงและคุณได้ขอให้ตรวจสอบอย่างเข้มงวด การยืนยันคีย์โฮสต์ล้มเหลว

มันทำให้ฉันเข้าสู่ระบบไม่กี่วินาทีแล้วปิดการเชื่อมต่อ

host1: ~ / .ssh # อ่านจากรีโมตโฮสต์ host1: การเชื่อมต่อรีเซ็ตโดยเพียร์ปิดการเชื่อมต่อไปยัง host1

ไม่มีใครรู้ว่าเกิดอะไรขึ้นและฉันจะทำอย่างไรเพื่อแก้ปัญหานี้?


1
คำถามนี้ซ้ำก่อนหน้านี้: serverfault.com/questions/2988/…
Drew Stephens

คำตอบ:


68

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

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

sed -i 377d ~/.ssh/known_hosts

นี้d eletes สาย 377 ตามที่ปรากฏหลังจากลำไส้ใหญ่ในคำเตือน:

/home/emerson/.ssh/known_hosts:377

หรือคุณสามารถลบรหัสที่เกี่ยวข้องออกได้โดยทำดังต่อไปนี้

ssh-keygen -R 127.0.0.1 (obviously replace with the server's IP)

โปรดอย่าลบไฟล์ทั้งหมดและทำให้แน่ใจว่านี่เป็นเครื่องที่คุณต้องการเชื่อมต่อก่อนที่จะทำการล้างคีย์เฉพาะ


จะไม่ลบมากกว่า 350 เซิร์ฟเวอร์เนื่องจากคีย์ไม่ตรงกันหนึ่งคีย์ มีความคิดว่าทำไมมันถึงปิดการเชื่อมต่อ?
setatakahashi

มันไม่ได้รับการแก้ไขเมื่อคุณลบบันทึก known_hosts ที่เกี่ยวข้องหรือไม่ ถ้าไม่คุณสามารถเรียกใช้ไคลเอ็นต์ ssh ในโหมด verbose และ pastebin ที่ใดก็ได้
Adam Gibbins

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

ฉันทำตามคำแนะนำของคุณแล้ว แต่ $ sed -i "46 d" ~ / .ssh / known_hosts sed: 1: "/Users/myusr/.ssh ... ": อักขระพิเศษที่ส่วนท้ายของคำสั่ง l ดังนั้นฉันจึงลบมันด้วยตนเอง เป็นกลุ่มและมันทำงานได้ Thanx!
Luis Ramirez-Monterosa

3
ไวยากรณ์ของอดัมเกือบจะถูกต้อง แต่คุณต้องการช่องว่างระหว่าง "377" และ "d" นอกจากนี้ใน OS X โฮสต์ที่รู้จักจะอยู่ใน ~ / .ssh / known_hosts; สังเกตการขาด "." ในชื่อไฟล์
ktappe

27

ฉันคิดว่าแม้ว่าคำตอบบางคำในที่นี้จะกล่าวถึงแนวทางการปฏิบัติที่แนะนำในคำถามของ OP แต่ก็ไม่ได้ตอบคำถามอย่างเต็มที่

คำถามระบุว่า "จะลบการตรวจสอบคีย์ RSA ที่เข้มงวดใน SSH ได้อย่างไรและมีปัญหาอะไรที่นี่"

ปัญหาที่นี่คือตามคำแนะนำของคนอื่นการเปลี่ยนแปลงในโฮสต์อาจเกิดจากการติดตั้งใหม่ของเซิร์ฟเวอร์ (สถานการณ์ทั่วไปส่วนใหญ่) และวิธีแก้ปัญหาที่แนะนำนั้นคือการลบคีย์ที่ละเมิดออกจากไฟล์. ssh / authorized_keys ด้วย inline sed

อย่างไรก็ตามฉันไม่เห็นคำตอบใด ๆ ที่อยู่ในส่วนเฉพาะของคำถาม " วิธีการลบการตรวจสอบคีย์ RSA ที่เข้มงวดใน SSH "

คุณสามารถลบการตรวจสอบ StrictHostKey ในแฟ้มการกำหนดค่า SSH ~/.ssh/configของคุณมักจะเก็บไว้ที่

ตัวอย่างโฮสต์บล็อกมีให้ด้านล่าง:

Host 101
  HostName yourip|hostname
  User youruserid
  IdentityFile /path/to/keyfile
  Port 22
  StrictHostKeyChecking no

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


3
+1 เนื่องจากโพสต์นี้เน้นที่ส่วนการตรวจสอบที่เข้มงวดของข้อความแสดงข้อผิดพลาด
Shibumi

1
+1 จากฉันเช่นกันสำหรับการระบุเนื้อหาของคำถาม ขึ้นอยู่กับปัจจัยที่อาจมีมากขึ้นในการทำ วิธีการนี้จะลดการตรวจสอบโฮสต์จาก "เข้มงวด" เป็น "บาง" (คำศัพท์ของฉัน) ในสถานการณ์ของฉันที่ทำให้ฉันไม่ได้รับอนุญาตให้ลงชื่อเข้าใช้เพราะวิธีที่ฉันต้องการลงชื่อเข้าใช้คือการป้อนรหัสผ่านและถูกปิดใช้งานโดยการตรวจสอบโฮสต์ "บางคน" ดังนั้นคุณต้องไปข้างหน้าและสั่งให้ ssh ใช้ / dev / null เป็น "UserKnownHostsFile" การตั้งค่านี้เป็นการตั้งค่าการตรวจสอบโฮสต์เป็น "ไม่มี" และจะใช้คำเตือน DIRE ข้างต้นจึงไม่ควรดำเนินการทั่วโลกหรืออย่างถาวร
คนพื้นที่ cardiff

นี่เป็นทางออกที่สง่างามจริงๆ ขอบคุณสำหรับการแบ่งปัน!
LeOn - Han Li

10

อีกวิธีหนึ่งในการลบ StrictHostKeyChecking เมื่อคุณต้องการใช้กับเซิร์ฟเวอร์เดียว:

ssh <server> -o StrictHostKeyChecking=no

จะให้คุณเข้าสู่ระบบ แต่ไม่แก้ไขปัญหาอย่างถาวร
Andres Canella

เมื่อฉันทำมันก็ทำให้ฉันมีโอกาสที่จะเพิ่มกุญแจซึ่งจะแก้ไขปัญหาได้อย่างถาวร
Greg Dougherty

บางทีเรามีปัญหาที่แตกต่างกันอย่างไร ฉันกำลังเชื่อมต่อกับเซิร์ฟเวอร์ที่มี IP อื่นมาก่อน
Andres Canella

หากคุณมีเซิร์ฟเวอร์ที่มีการเปลี่ยนแปลงข้อมูลคุณจะต้องลบมันออกจากไฟล์โฮสต์ที่คุณรู้จัก (หลังจากพบว่าการเปลี่ยนแปลงนั้นถูกต้อง) และเพิ่มข้อมูลใหม่ หากคุณมีเซิร์ฟเวอร์ใหม่ -o จะให้คุณเชื่อมต่อกับเซิร์ฟเวอร์และรับข้อมูลเพิ่มเติม
Greg Dougherty

ฉันคิดว่าเป็นวิธีปฏิบัติที่ดีในการตั้งค่า StrictHostKeyChecking เป็น YES ในการตั้งค่าของคุณและใช้สวิตช์นี้เฉพาะเมื่อคุณรู้ว่าคุณกำลังเชื่อมต่อกับเซิร์ฟเวอร์ใหม่หรือเปลี่ยนคีย์บนเซิร์ฟเวอร์เก่า
mohak

5

ก่อนอื่นนี่คือเครื่องของคุณหรือไม่? คุณเปลี่ยนคีย์โฮสต์อย่างรู้เท่าทันหรือไม่? ถ้าไม่ฉันจะกังวลมากว่ามีบางสิ่งที่เปลี่ยนแปลงข้อมูลนั้น

ประการที่สองเปิดการดีบัก ssh

ssh -vvv user@host

และดูสิ่งที่บอกคุณลองค้นหา / var / log / secure และ / var / log / ข้อความบนเซิร์ฟเวอร์ที่คุณพยายามเชื่อมต่อเพื่อหาเบาะแส sshd ให้ข้อความผิดพลาดที่ดี

ประการที่สามเครื่องนี้เชื่อมต่อกับอินเทอร์เน็ตหรือไม่ คุณควรอนุญาตการล็อกอินรูทหรือไม่?


1
+1 สำหรับความคิดเห็นการเข้าสู่ระบบราก
Fahad Sadah

สิ่งที่ต้องทำเพื่อให้เกิดข้อผิดพลาดนี้คือเครื่องเป้าหมายที่ได้รับการแก้ไขใหม่ หากคุณกำลังเชื่อมต่อกับเป้าหมายที่อยู่ข้าง DMZ ของคุณการโจมตี MitM นั้นไม่น่าเป็นไปได้
ktappe

3

คุณได้รับสิ่งนี้เนื่องจากมีการเปลี่ยนแปลงบางอย่าง (เช่น NIC ใหม่ IP ใหม่การเปลี่ยนแปลงซอฟต์แวร์เซิร์ฟเวอร์ ฯลฯ ) มุ่งเน้นการรักษาความปลอดภัยมีบทความที่ดีในการป้องกัน SSH คีย์โฮสต์

เพียงแค่ลบคีย์ (ใช้ SFTP หรือคล้ายกัน) จากเซิร์ฟเวอร์โดยแก้ไข$HOME/.ssh/known_hostsไฟล์และยอมรับคีย์ใหม่ในการเชื่อมต่อครั้งถัดไป

การเชื่อมต่อของคุณอาจลดลงเนื่องจากการตั้งค่า StrictHostKeyChecking ดูหัวข้อนี้สำหรับปัญหาที่คล้ายกัน


2
ไม่โปรดอย่าทำอย่างนี้ คุณลักษณะนี้ให้ความปลอดภัยทั้งหมดอย่างสมบูรณ์ โปรดลบเฉพาะคีย์ที่มีการเปลี่ยนแปลงไม่ใช่ทั้งหมดที่รู้จัก _ โฮสต์
Adam Gibbins

5
ฉันไม่แนะนำให้ลบไฟล์ known_hosts ฉันแนะนำให้แก้ไขแล้วลบคีย์ออก

อุ๊ปขอโทษเข้าใจผิด
Adam Gibbins

2
ข้อความนี้ไม่สามารถทริกเกอร์โดยที่อยู่ IP ใหม่ซึ่งน้อยกว่าโดย NIC ใหม่ ดูคำตอบที่ถูกต้องของ Adam Gibbins
bortzmeyer

1
ก่อนที่คุณจะลงคะแนน (ฉันกำลังค้นหาคนที่มีความสุขในเรื่องนี้) ให้ทำการวิจัยของคุณ อ่านบทความนี้การรักษาความปลอดภัยโฟกัสsecurityfocus.com/infocus/1806 ฉันเสนอราคาเล็กน้อย: "เหตุใดจึงสามารถเปลี่ยนคีย์โฮสต์ได้เครื่องที่คุณต้องการเชื่อมต่อถูกย้ายไปยังชื่อ DNS หรือที่อยู่ IP อื่นหรือถูกแทนที่ด้วยรหัสใหม่ทั้งหมด" หากคำตอบไม่ถูกต้องอย่างน่ากลัวโปรดให้โอกาสในการแก้ไข ท้ายที่สุดนี่คือวิกิ

3

เนื่องจาก 'โฮสต์' [กำหนดแบบกว้าง ๆ อาจเป็นทุกอย่างตั้งแต่การติดตั้งใหม่ / มัลติบูตไปยังคอมพิวเตอร์เครื่องอื่นที่มีที่อยู่ IP ที่คุณเคยเชื่อมต่อมาก่อนหน้านี้] จะปรากฏต่อไคลเอนต์ ssh ที่มีการเปลี่ยนแปลง ความผิดพลาด

ไม่จำเป็นต้องปิดการตรวจสอบอย่างเข้มงวดและไม่มีการลบคีย์ที่บันทึกไว้อย่างขายส่ง

ค่อนข้างเป็นไปได้ที่จะมีสองคีย์ที่แตกต่างกันแสดงอยู่ใน known_hosts สำหรับชื่อโฮสต์หรือที่อยู่ IP ที่เฉพาะเจาะจง; เสนอทางเลือก 2 ทางให้คุณตามที่คุณคิดว่าคุณอาจต้องใช้คีย์ 'เก่า' ซึ่งปัจจุบันจัดเก็บอยู่ใน known_hosts

ลบคีย์เฉพาะที่อ้างถึงที่ l377 ของ known_hosts สำหรับ OP หรือเก็บทั้งสองอย่าง

วิธีที่ง่ายที่สุดในการเก็บทั้งคู่โดยหลีกเลี่ยงการลบคีย์ใน known_hosts คือ

  1. แก้ไข known_hosts เพื่อเพิ่ม # ที่จุดเริ่มต้นของรายการ 'old' ที่อ้างอิงใน known_hosts [@ l377] ชั่วคราว
  2. เชื่อมต่อ [ssh กับโฮสต์] ยอมรับการแจ้งเตือนเพื่อเพิ่มคีย์ใหม่ 'อัตโนมัติ'
  3. จากนั้นแก้ไข known_hosts อีกครั้งเพื่อลบ #

คำตอบเพิ่มเติมที่"เพิ่มคีย์โฮสต์ที่ถูกต้องใน known_hosts" / หลายคีย์โฮสต์ ssh ต่อชื่อโฮสต์หรือไม่


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