เมื่อคุณพยายามใช้ ssh เพื่อติดต่อกับเซิร์ฟเวอร์ระยะไกล คุณอาจได้รับข้อผิดพลาดที่อ่านไม่พบวิธีการแลกเปลี่ยนคีย์ที่ตรงกันก่อนที่จะให้คำแนะนำแก่คุณเกี่ยวกับอัลกอริทึมการเข้ารหัสที่คุณต้องการใช้ คุณจะไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกลได้ทุกครั้งที่พบข้อผิดพลาด กระบวนการนี้อาจสร้างความหงุดหงิดใจได้มาก แต่ข้อผิดพลาดเกิดขึ้นบ่อยมากจนคุณมักจะพบว่าประเภท Unix พูดถึงสิ่งที่พวกเขาประสบกับมัน และให้คำแนะนำแบบเดียวกันในการออกจากป่า
วิธีการต่อไปนี้เพื่อแก้ไขข้อผิดพลาดได้รับการทดสอบกับทุกอย่างที่ ssh ใช้งานได้ แต่คุณมักจะพบปัญหานี้ในระบบ Unix และ Linux คุณควรจะสามารถใช้กระบวนการเดียวกันเพื่อแก้ไขได้หากคุณใช้ ssh บน Windows หรือสิ่งแปลกใหม่ แต่คุณอาจพบว่าตัวเลือกสวิตช์แตกต่างกันเล็กน้อย
วิธีที่ 1:ติดต่อเซิร์ฟเวอร์อีกครั้งและสร้างคีย์ใหม่
ก่อนที่คุณจะดำเนินการใดๆ ตรวจสอบให้แน่ใจว่าคุณสามารถทำให้เกิดข้อผิดพลาดซ้ำได้ บางครั้งข้อความแสดงข้อผิดพลาดนี้อาจเป็นเพราะมีบริการระยะไกลที่ไม่ได้ทำงานอยู่ในขณะนี้ ซึ่งอาจได้รับการแก้ไขในระหว่างนี้ ในขณะที่เรากำลังเรียกใช้ ssh ในเครื่องเสมือนที่อนุญาตให้เชื่อมต่อกับที่อยู่เซิร์ฟเวอร์ปลอมซึ่งได้รับการตั้งค่าเป็น example.org ที่ได้รับการรับรองจากเอกสาร แต่คุณจะต้องการแทนที่ที่อยู่เครือข่ายจริงแทน
หากคุณยังคงได้รับอยู่ ให้ลองสร้างคีย์ใหม่ด้วย ssh-keygen -A จากพรอมต์คำสั่ง การดำเนินการนี้จะรีเฟรชแคชที่แอปพลิเคชัน ssh ใช้เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล ในกรณีนี้ คุณอาจต้องการลองรีสตาร์ท ssh โดยเรียกใช้ service ssh restart และให้เวลาสักครู่
หากคุณยังประสบปัญหาอยู่ แสดงว่าเซิร์ฟเวอร์และไคลเอนต์ไม่สามารถทำข้อตกลงกับโปรโตคอลที่เหมาะสมได้ OpenSSH ใช้อาร์เรย์ที่สับสนของโปรโตคอลที่แตกต่างกัน แต่ปิดการใช้งานเหล่านี้จำนวนหนึ่งเนื่องจากตอนนี้เป็นที่ทราบกันว่าถูกบุกรุกและไม่ปลอดภัย คุณจะต้องอัปเดตแพ็คเกจ ssh ทั้งหมดที่ปลายเซิร์ฟเวอร์ของสมการ ดังนั้นตรวจสอบให้แน่ใจว่าผู้ดูแลระบบทราบถึงสิ่งที่เกิดขึ้น หากเป็นเซิร์ฟเวอร์ของคุณเอง โปรดสละเวลาสักครู่เพื่ออัปเดตเซิร์ฟเวอร์
หากนี่ไม่ใช่ตัวเลือกและคุณทราบถึงอันตรายของการใช้อัลกอริธึมที่ถูกบุกรุก มีวิธีฝั่งไคลเอ็นต์ในการข้ามข้อความแสดงข้อผิดพลาดนี้
วิธีที่ 2:เปิดใช้งานตัวเลือกดั้งเดิมใน OpenSSH
ดูว่าข้อความแสดงข้อผิดพลาดอ่านอะไรหลังคำ ข้อเสนอของพวกเขา:เพื่อดูว่าเซิร์ฟเวอร์ระยะไกลต้องการอัลกอริทึมแบบใด แม้ว่าระบบส่วนใหญ่ควรใช้ openssh7 ซึ่งได้ปิดการใช้งานเทคโนโลยี diffie-hellman-group1-sha1 ที่ล้าสมัยไปแล้ว แต่คุณจะได้รับแจ้งให้ใช้ sha1 หากยังคงติดอยู่ที่ openssh6 หรือสิ่งที่คล้ายกัน
เรียกใช้ ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 [email protected] กับโฮสต์เครือข่ายจริงหรือที่อยู่ IP ของเซิร์ฟเวอร์ระยะไกลเพื่อแก้ไขปัญหานี้ในฝั่งไคลเอ็นต์ หากวิธีนี้แก้ปัญหาได้ แสดงว่ากำลังค้นหาโปรโตคอลที่ใช้ sha1 ที่เก่ากว่าเพื่อเชื่อมต่อ โซลูชันที่ใช้ sha1 ที่เก่ากว่านี้ถูกปิดใช้งานด้วยเหตุผลที่ดี แต่คุณสามารถข้ามได้อย่างถาวรโดยใช้ตัวแก้ไข nano หรือ vim เพื่อเปิดไฟล์ ~/.ssh/config และเพิ่มบรรทัด:
โฮสต์ example.org
KexAlgorithms +diffie-hellman-group1-sha1
โปรดจำไว้ว่า คุณจะต้องตรวจสอบให้แน่ใจว่ามีเครื่องหมายบวกอยู่ เนื่องจากหมายความว่า ssh จะต่อท้ายแทนที่จะแทนที่ค่าเริ่มต้นที่ปลอดภัยยิ่งขึ้น เมื่อเซิร์ฟเวอร์อัปเดตแพ็คเกจ คุณจะใช้โปรโตคอลที่ปลอดภัยกว่าในกรณีส่วนใหญ่
หากคุณได้รับข้อผิดพลาดก่อนที่จะกล่าวถึงโปรโตคอล ssh-dss แทนที่จะเป็นเวอร์ชัน sha1 คุณสามารถลองใช้คำสั่งนี้ตามด้วยชื่อโฮสต์ของคุณแทน:ssh -oHostKeyAlgorithms=+ssh-dss ซึ่งหากใช้งานได้ คุณจะต้องแก้ไขไฟล์ ~/.ssh/config อีกครั้ง หลังจากบรรทัด Host ให้เพิ่มแท็บและสิ่งต่อไปนี้:
HostKeyAlgorithms +ssh-dss
โปรดจำไว้ว่า เช่นเดียวกับระบบ sha1 คีย์ ssh-dss ถูกเลิกใช้แล้วสำหรับปัญหาด้านความปลอดภัยที่มีเหตุผลอย่างยิ่งที่เกี่ยวข้อง การใช้สิ่งนี้อาจทำให้เกิดช่องโหว่ในการเชื่อมต่อของคุณ ดังนั้นควรมองว่าเป็นการแก้ไขชั่วคราวเท่านั้น ตรวจสอบให้แน่ใจว่าได้รับการอัปเดตเซิร์ฟเวอร์โดยเร็วที่สุด