วิธีแก้ไข “คำเตือน: การระบุโฮสต์ระยะไกลมีการเปลี่ยนแปลง!”

เผยแพร่แล้ว: 2024-10-16
สารบัญ
  • ทำความเข้าใจกับคำเตือน
  • ตรวจสอบข้อมูลประจำตัวของเซิร์ฟเวอร์
  • โซลูชันที่ 1: ลบคีย์โฮสต์เก่าด้วยตนเอง (Windows, Mac, Ubuntu)
  • โซลูชันที่ 2: ล้างไฟล์known_hostsทั้งหมด (Windows, Mac, Ubuntu)
  • โซลูชันที่ 3: ละเว้นการตรวจสอบคีย์โฮสต์ชั่วคราว (Windows, Mac, Ubuntu)
  • โซลูชันที่ 4: เพิ่มคีย์โฮสต์ใหม่ด้วยตนเอง (Windows, Mac, Ubuntu)
  • โซลูชันที่ 5: ตรวจสอบการเปลี่ยนแปลง DNS หรือที่อยู่ IP (Windows, Mac, Ubuntu)
  • แนวทางปฏิบัติที่ดีที่สุดเพื่อหลีกเลี่ยงปัญหานี้ในอนาคต (Windows, Mac, Ubuntu)
  • บทสรุป

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

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

ในบทความนี้ เราจะอธิบายวิธีแก้ปัญหานี้อย่างปลอดภัยบนระบบ Mac , Ubuntu (Linux) และ Windows เพื่อให้มั่นใจว่าคุณสามารถเชื่อมต่อได้อย่างปลอดภัยต่อไปโดยไม่ละเลยความเสี่ยงที่อาจเกิดขึ้น

คุณอาจสนใจอ่าน: วิธีแก้ไข Error Permission Denied (Publickey)

ทำความเข้าใจกับคำเตือน

เหตุใดคำเตือนจึงปรากฏขึ้น

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

สถานการณ์ทั่วไปสำหรับคำเตือน:

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

บทบาทของไฟล์ known_hosts :

ไฟล์ known_hosts คือที่ที่ SSH เก็บข้อมูลเกี่ยวกับโฮสต์ระยะไกลที่คุณเคยเชื่อมต่อด้วย โดยทั่วไปไฟล์จะอยู่ในไดเร็กทอรี ~/.ssh/ บน Mac และ Ubuntu และสำหรับผู้ใช้ PuTTY บน Windows จะเก็บคีย์โฮสต์ไว้ใน Windows Registry

ตรวจสอบข้อมูลประจำตัวของเซิร์ฟเวอร์

ก่อนที่จะทำการเปลี่ยนแปลงใด ๆ เพื่อแก้ไขปัญหา “ Remote Host Identification has Changed! ” คำเตือน การตรวจสอบว่าข้อมูลประจำตัวของเซิร์ฟเวอร์มีการเปลี่ยนแปลงอย่างถูกต้องตามกฎหมายถือเป็นสิ่งสำคัญหรือไม่ ขั้นตอนนี้ทำให้แน่ใจได้ว่าคุณจะไม่ตกเป็นเหยื่อของการโจมตีแบบแทรกกลาง

ทำไมคุณควรตรวจสอบตัวตนของเซิร์ฟเวอร์ก่อน

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

ขั้นตอนในการตรวจสอบตัวตนของเซิร์ฟเวอร์:

  • ติดต่อผู้ดูแลระบบเซิร์ฟเวอร์: หากคุณไม่ใช่ผู้ดูแลเซิร์ฟเวอร์ โปรดติดต่อผู้ดูแลระบบหรือผู้ให้บริการโฮสติ้งและสอบถามว่ามีการเปลี่ยนแปลงล่าสุดหรือไม่ เช่น การเปลี่ยนแปลงที่อยู่ IP การติดตั้งเซิร์ฟเวอร์ใหม่ หรือการสร้างคีย์ใหม่
  • เปรียบเทียบลายนิ้วมือคีย์โฮสต์: ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบคีย์โฮสต์ของเซิร์ฟเวอร์ด้วยตนเอง:
     ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub

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

โซลูชันที่ 1: ลบคีย์โฮสต์เก่าด้วยตนเอง (Windows, Mac, Ubuntu)

สำหรับ Mac และ Ubuntu (Linux):

  1. เปิดเทอร์มินัล
  2. เปิดไฟล์ ~/.ssh/known_hosts โดยใช้โปรแกรมแก้ไขข้อความ:
     nano ~/.ssh/known_hosts
  3. ค้นหาบรรทัดที่สอดคล้องกับชื่อโฮสต์หรือที่อยู่ IP ของเซิร์ฟเวอร์ระยะไกล
  4. ลบบรรทัดที่มีคีย์โฮสต์เก่า
  5. บันทึกไฟล์และปิดโปรแกรมแก้ไขข้อความ
  6. เชื่อมต่อกับเซิร์ฟเวอร์อีกครั้งโดยใช้ SSH:
     ssh <username>@<hostname>

การลบอัตโนมัติ (Mac และ Ubuntu):

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

 ssh-keygen -R <hostname or IP>

สำหรับ Windows (ใช้ PuTTY):

  1. เปิด PuTTY
  2. กด Windows + R พิมพ์ regedit แล้วกด Enter
  3. นำทางไปยังเส้นทางรีจิสทรี:
     HKEY_CURRENT_USER\Software\Myusername\PuTTY\SshHostKeys
  4. ค้นหารายการที่เกี่ยวข้องกับชื่อโฮสต์หรือที่อยู่ IP ของเซิร์ฟเวอร์ระยะไกล
  5. คลิกขวาที่รายการแล้วเลือก Delete
  6. เชื่อมต่อกับเซิร์ฟเวอร์อีกครั้งใน PuTTY และจะแจ้งให้คุณยอมรับรหัสใหม่

สำหรับ Windows (ใช้ Git Bash):

  1. เปิด Git ทุบตี
  2. รันคำสั่งต่อไปนี้:
     ssh-keygen -R <hostname>
  3. SSH จะแจ้งให้คุณยอมรับรหัสใหม่ในครั้งถัดไปที่คุณเชื่อมต่อ

โซลูชันที่ 2: ล้างไฟล์ known_hosts ทั้งหมด (Windows, Mac, Ubuntu)

สำหรับ Mac และ Ubuntu (Linux):

  1. เปิดเทอร์มินัล
  2. รันคำสั่งต่อไปนี้เพื่อลบไฟล์ known_hosts ทั้งหมด:
     rm ~/.ssh/known_hosts
  3. เชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลอีกครั้งโดยใช้ SSH:
     ssh <username>@<hostname>

สำหรับ Windows (ใช้ PuTTY):

  1. เปิด PuTTY
  2. กด Windows + R พิมพ์ regedit แล้วกด Enter เพื่อเปิด Registry Editor
  3. นำทางไปยัง:
     HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  4. คลิกขวาที่โฟลเดอร์ SshHostKeys และเลือก Delete การดำเนินการนี้จะลบคีย์โฮสต์ที่เก็บไว้ทั้งหมด
  5. เชื่อมต่อกับเซิร์ฟเวอร์อีกครั้งโดยใช้ PuTTY และคุณจะได้รับแจ้งให้ยอมรับคีย์โฮสต์ใหม่

สำหรับ Windows (ใช้ Git Bash):

  1. เปิด Git ทุบตี
  2. ลบไฟล์ known_hosts โดยการรัน:
     rm ~/.ssh/known_hosts
  3. เมื่อคุณเชื่อมต่อกับเซิร์ฟเวอร์อีกครั้งโดยใช้ SSH คุณจะได้รับแจ้งให้ยอมรับรหัสโฮสต์ใหม่

โซลูชันที่ 3: ละเว้นการตรวจสอบคีย์โฮสต์ชั่วคราว (Windows, Mac, Ubuntu)

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

สำหรับ Mac และ Ubuntu (Linux):

 ssh -o StrictHostKeyChecking=no <username>@<hostname>

สำหรับ Windows (ใช้ Git Bash):

 ssh -o StrictHostKeyChecking=no <username>@<hostname>

สำหรับ Windows (ใช้ PuTTY):

  1. เปิด PuTTY
  2. ไปที่ การเชื่อมต่อ > SSH > คีย์โฮสต์
  3. ปิดใช้งานการตรวจสอบคีย์โฮสต์โดยเลือก ยอมรับเสมอ
  4. เชื่อมต่อกับเซิร์ฟเวอร์อีกครั้งโดยไม่ตรวจสอบรหัสโฮสต์

โซลูชันที่ 4: เพิ่มคีย์โฮสต์ใหม่ด้วยตนเอง (Windows, Mac, Ubuntu)

สำหรับ Mac และ Ubuntu (Linux):

 ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

สำหรับ Windows (ใช้ Git Bash):

 ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

สำหรับ Windows (ใช้ PuTTY):

น่าเสียดายที่ PuTTY ไม่เทียบเท่ากับ ssh-keyscan โดยตรง หากต้องการเพิ่มคีย์โฮสต์ด้วยตนเอง คุณจะต้องเชื่อมต่อกับเซิร์ฟเวอร์และอนุญาตให้ PuTTY แจ้งให้คุณใส่คีย์โฮสต์ใหม่

โซลูชันที่ 5: ตรวจสอบการเปลี่ยนแปลง DNS หรือที่อยู่ IP (Windows, Mac, Ubuntu)

สำหรับ Mac และ Ubuntu (Linux):

 nslookup <hostname>
 dig <hostname>

สำหรับ Windows (ใช้ Git Bash):

 nslookup <hostname>
 dig <hostname>

สำหรับ Windows (ใช้ PuTTY):

  1. เปิด พร้อมท์คำสั่ง หรือ PowerShell
  2. ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบ DNS หรือที่อยู่ IP:
     nslookup <hostname>
  3. เปรียบเทียบที่อยู่ IP ในเอาต์พุตกับสิ่งที่ PuTTY แสดงในรีจิสทรี
  4. หากที่อยู่ IP มีการเปลี่ยนแปลง ให้ลบคีย์โฮสต์เก่าออกจากรีจิสทรีของ PuTTY โดยไปที่:
     HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
  5. เชื่อมต่อใหม่ผ่าน PuTTY และจะแจ้งให้คุณยอมรับรหัสใหม่

แนวทางปฏิบัติที่ดีที่สุดเพื่อหลีกเลี่ยงปัญหานี้ในอนาคต (Windows, Mac, Ubuntu)

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

บทสรุป

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

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

นอกจากนี้ การปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุด เช่น การใช้ที่อยู่ IP แบบคงที่ การอัปเดต known_hosts เป็นประจำ และการพิจารณาใบรับรอง SSH จะช่วยลดการเกิดปัญหานี้ได้ในอนาคต