วิธีแก้ไข “คำเตือน: การระบุโฮสต์ระยะไกลมีการเปลี่ยนแปลง!”
เผยแพร่แล้ว: 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):
- เปิดเทอร์มินัล
- เปิดไฟล์
~/.ssh/known_hosts
โดยใช้โปรแกรมแก้ไขข้อความ:nano ~/.ssh/known_hosts
- ค้นหาบรรทัดที่สอดคล้องกับชื่อโฮสต์หรือที่อยู่ IP ของเซิร์ฟเวอร์ระยะไกล
- ลบบรรทัดที่มีคีย์โฮสต์เก่า
- บันทึกไฟล์และปิดโปรแกรมแก้ไขข้อความ
- เชื่อมต่อกับเซิร์ฟเวอร์อีกครั้งโดยใช้ SSH:
ssh <username>@<hostname>
การลบอัตโนมัติ (Mac และ Ubuntu):
แทนที่จะแก้ไขไฟล์ known_hosts
ด้วยตนเอง คุณสามารถใช้คำสั่งต่อไปนี้เพื่อลบคีย์โฮสต์เก่าโดยอัตโนมัติ:
ssh-keygen -R <hostname or IP>
สำหรับ Windows (ใช้ PuTTY):
- เปิด PuTTY
- กด Windows + R พิมพ์
regedit
แล้วกด Enter - นำทางไปยังเส้นทางรีจิสทรี:
HKEY_CURRENT_USER\Software\Myusername\PuTTY\SshHostKeys
- ค้นหารายการที่เกี่ยวข้องกับชื่อโฮสต์หรือที่อยู่ IP ของเซิร์ฟเวอร์ระยะไกล
- คลิกขวาที่รายการแล้วเลือก Delete
- เชื่อมต่อกับเซิร์ฟเวอร์อีกครั้งใน PuTTY และจะแจ้งให้คุณยอมรับรหัสใหม่
สำหรับ Windows (ใช้ Git Bash):
- เปิด Git ทุบตี
- รันคำสั่งต่อไปนี้:
ssh-keygen -R <hostname>
- SSH จะแจ้งให้คุณยอมรับรหัสใหม่ในครั้งถัดไปที่คุณเชื่อมต่อ
โซลูชันที่ 2: ล้างไฟล์ known_hosts
ทั้งหมด (Windows, Mac, Ubuntu)
สำหรับ Mac และ Ubuntu (Linux):
- เปิดเทอร์มินัล
- รันคำสั่งต่อไปนี้เพื่อลบไฟล์
known_hosts
ทั้งหมด:rm ~/.ssh/known_hosts
- เชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลอีกครั้งโดยใช้ SSH:
ssh <username>@<hostname>
สำหรับ Windows (ใช้ PuTTY):
- เปิด PuTTY
- กด Windows + R พิมพ์
regedit
แล้วกด Enter เพื่อเปิด Registry Editor - นำทางไปยัง:
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
- คลิกขวาที่โฟลเดอร์
SshHostKeys
และเลือก Delete การดำเนินการนี้จะลบคีย์โฮสต์ที่เก็บไว้ทั้งหมด - เชื่อมต่อกับเซิร์ฟเวอร์อีกครั้งโดยใช้ PuTTY และคุณจะได้รับแจ้งให้ยอมรับคีย์โฮสต์ใหม่
สำหรับ Windows (ใช้ Git Bash):
- เปิด Git ทุบตี
- ลบไฟล์
known_hosts
โดยการรัน:rm ~/.ssh/known_hosts
- เมื่อคุณเชื่อมต่อกับเซิร์ฟเวอร์อีกครั้งโดยใช้ 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):
- เปิด PuTTY
- ไปที่ การเชื่อมต่อ > SSH > คีย์โฮสต์
- ปิดใช้งานการตรวจสอบคีย์โฮสต์โดยเลือก ยอมรับเสมอ
- เชื่อมต่อกับเซิร์ฟเวอร์อีกครั้งโดยไม่ตรวจสอบรหัสโฮสต์
โซลูชันที่ 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):
- เปิด พร้อมท์คำสั่ง หรือ PowerShell
- ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบ DNS หรือที่อยู่ IP:
nslookup <hostname>
- เปรียบเทียบที่อยู่ IP ในเอาต์พุตกับสิ่งที่ PuTTY แสดงในรีจิสทรี
- หากที่อยู่ IP มีการเปลี่ยนแปลง ให้ลบคีย์โฮสต์เก่าออกจากรีจิสทรีของ PuTTY โดยไปที่:
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys
- เชื่อมต่อใหม่ผ่าน 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 จะช่วยลดการเกิดปัญหานี้ได้ในอนาคต
ในฐานะหนึ่งในผู้ร่วมก่อตั้ง Codeless ฉันนำความเชี่ยวชาญในการพัฒนา WordPress และเว็บแอปพลิเคชัน รวมถึงประวัติในการจัดการโฮสติ้งและเซิร์ฟเวอร์อย่างมีประสิทธิภาพ ความหลงใหลในการได้รับความรู้และความกระตือรือร้นในการสร้างและทดสอบเทคโนโลยีใหม่ๆ ทำให้ฉันคิดค้นและปรับปรุงอย่างต่อเนื่อง
ความเชี่ยวชาญ:
การพัฒนาเว็บ
ออกแบบเว็บไซต์
การบริหารระบบลินุกซ์,
การทำ SEO
ประสบการณ์:
ประสบการณ์ 15 ปีในการพัฒนาเว็บโดยการพัฒนาและออกแบบธีม WordPress ที่ได้รับความนิยมสูงสุด เช่น Specular, Tower และ Folie
การศึกษา:
ฉันสำเร็จการศึกษาสาขาฟิสิกส์วิศวกรรมและ MSC สาขาวัสดุศาสตร์และออปโตอิเล็กทรอนิกส์
ทวิตเตอร์, ลิงค์ดิน