คัดลอกคีย์ ssh จากเซิร์ฟเวอร์หนึ่งไปยังเซิร์ฟเวอร์อื่น


12

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

$ ssh abcd

ปัญหาคือทุกครั้งที่ผู้ใช้พยายามเข้าสู่ระบบเธอได้รับข้อผิดพลาดไม่ตรงกัน ssh-key ต่อไปนี้

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@
@ คำเตือน: การระบุโฮสต์ของรีโมทมีการเปลี่ยนแปลง! แอท
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@
เป็นไปได้ว่าบางคนกำลังทำสิ่งที่น่ารังเกียจ!
บางคนอาจกำลังดักฟังคุณอยู่ในขณะนี้ (การโจมตีแบบคนกลาง)!
อาจเป็นไปได้ว่าคีย์โฮสต์ RSA เพิ่งมีการเปลี่ยนแปลง
ลายนิ้วมือสำหรับคีย์ RSA ที่ส่งโดยโฮสต์ระยะไกลคือ
02: dc: c6: 18: 1b: 34: b7: 1D: FA: 90: AB: e1: 95: 48: 69: 84
กรุณาติดต่อผู้ดูแลระบบของคุณ
เพิ่มคีย์โฮสต์ที่ถูกต้องใน /home/user/.ssh/known_hosts เพื่อกำจัดข้อความนี้
คีย์ที่ละเมิดใน /home/user/.ssh/known_hosts:37
คีย์โฮสต์ RSA สำหรับศิษย์เก่ามีการเปลี่ยนแปลงและคุณได้ขอให้ตรวจสอบอย่างเข้มงวด
การยืนยันคีย์โฮสต์ล้มเหลว

ฉันรู้ว่าผู้ใช้สามารถลบบรรทัด # 37 จากไฟล์ ~ / .ssh / known_hosts และครั้งต่อไปที่เธอจะได้รับพรอมต์ใช่ / ไม่ สิ่งที่ฉันต้องการก็คือผู้ใช้ควรถูกเก็บไว้โดยไม่รู้ตัวว่าสิ่งที่เปลี่ยนเครื่องนี้ทั้งหมดและเพิ่งได้รับพร้อมท์สำหรับรหัสผ่าน

ทำอย่างไร


3
คุณทราบหรือไม่ว่าการทำเช่นนี้จะกำจัดsshการป้องกันของมนุษย์เพียงคนเดียวในการโจมตีระดับกลางและอาจส่งผลให้คุณส่งรหัสผ่านของคุณไปยังผู้โจมตีแทนที่จะเป็นเครื่องที่ตั้งใจไว้ ถ้าคุณไม่ทราบว่าคุณอยู่ยงคงกระพันต่อการโจมตีที่แอคทีฟ (ตัวอย่างเช่นคุณอยู่ในเครือข่ายภายในที่ปลอดภัยเหมือนกับเครื่องเป้าหมาย) sshโมเดลการรักษาความปลอดภัยนี้จะทำลาย
David Schwartz

ใช่. เครื่องทั้งสองอยู่ในเครือข่ายภายในเดียวกัน แม้แต่ผู้ใช้ที่อยู่ในเครือข่ายภายในเดียวกัน เมื่อพิจารณาถึงสถานการณ์นี้ตัวเลือกของฉันคืออะไร
Souvik Pal

นั่นยังไม่พอ. พวกเขาจะต้องอยู่ในเครือข่ายภายในที่ปลอดภัยเดียวกัน นั่นคือพวกเขาจะต้องเชื่อมั่นอย่างแน่นอน 100% ว่าไม่มีอุปกรณ์ใดที่เชื่อมต่อกับเครือข่ายภายในที่ไม่ปลอดภัย 100% และพวกเขาจะต้องเชื่อถือได้ 100% ทุกคนที่มีอำนาจควบคุมอุปกรณ์เหล่านั้นหรือสามารถเชื่อมต่ออุปกรณ์กับเครือข่ายนั้น กล่าวอีกนัยหนึ่งในเกือบทุกสถานการณ์จริงนี่เป็นความคิดที่ไม่ดี
David Schwartz

2
มันเป็นสิ่งที่สมเหตุสมผลอย่างสมบูรณ์แบบที่จะทำ ฉันทำซ้ำเซิร์ฟเวอร์ ssh ไปยังเซิร์ฟเวอร์อื่นสำหรับ HA เพื่อที่ว่าเมื่อฉันเข้าสู่ระบบฉันได้รับข้อผิดพลาดเหล่านั้น นอกจากนี้ฉันได้รับอีเมลเมื่อเกิดความล้มเหลว
Matt H

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

คำตอบ:


14

ตามที่กล่าวถึงEthabellคุณสามารถคัดลอกคีย์โฮสต์ปัจจุบันไปยังเซิร์ฟเวอร์ใหม่

คุณสามารถค้นหาโฮสต์คีย์ของคุณได้โดยการเปิดsshd_configไฟล์ของคุณ(ในกล่อง Ubuntu 12.04 ของฉัน/etc/ssh/sshd_config) ในไฟล์กำหนดค่าให้ค้นหาHostKeyรายการ รายการเหล่านี้จะบอกคุณว่าไฟล์โฮสต์คีย์อยู่ที่ไหน คุณควรจะสามารถคัดลอกไฟล์เหล่านี้ไปยังเซิร์ฟเวอร์ใหม่และอัปเดตเซิร์ฟเวอร์ใหม่sshd_configให้ชี้ไปที่คีย์ที่คัดลอก (หรือเพียงแค่เขียนทับไฟล์ที่มีอยู่แล้วบนเซิร์ฟเวอร์ใหม่)

นอกจากนี้ให้สังเกตหัวข้อนี้จากsshd_configหน้า man โดยเฉพาะส่วนที่เกี่ยวกับการอนุญาต:

ระบุไฟล์ที่มีไพรเวตคีย์โฮสต์ที่ SSH ใช้ เริ่มต้นคือ/etc/ssh/ssh_host_keyโปรโตคอลรุ่นที่ 1, และ /etc/ssh/ssh_host_dsa_key, /etc/ssh/ssh_host_ecdsa_keyและ/etc/ssh/ssh_host_rsa_keyสำหรับโปรโตคอลรุ่นที่ 2 หมายเหตุว่า sshd (8) จะปฏิเสธที่จะใช้ไฟล์ถ้ามันจะเป็นกลุ่ม / โลกสามารถเข้าถึงได้ เป็นไปได้ที่จะมีไฟล์โฮสต์คีย์หลายไฟล์ คีย์“ rsa1” ใช้สำหรับเวอร์ชัน 1 และ“ dsa”,“ ecdsa” หรือ“ rsa” ใช้สำหรับเวอร์ชัน 2 ของโปรโตคอล SSH


1

หากคุณมีรหัสโฮสต์เดิมคุณสามารถคืนค่าได้และจะหยุดข้อผิดพลาด

หรือคุณสามารถปิด StrictHostKeyChecking ในไฟล์ sshd config ของคุณ

... การทำเช่นนี้เป็นความคิดที่น่ากลัวและน่ากลัว หากมีวิธีให้คุณรันssh-keygen -R server.example.comบนเครื่องไคลเอนต์นั่นจะเป็นวิธีที่ดีที่สุด - เนื่องจากการปิดการตรวจสอบคีย์โฮสต์เหมือนกับการพูดว่า "เฮ้โจมตีฉัน" ฉันต้องการความคลุมเครือเมื่อสิ่งต่าง ๆ เปลี่ยนแปลง แต่ความปลอดภัยควรมีความสำคัญอันดับ 1 มากกว่าการปิดบังการเปลี่ยนแปลง


คุณสามารถอธิบายรายละเอียดเกี่ยวกับวิธีกู้คืนโฮสต์คีย์บนเครื่องที่ใหม่กว่าได้ไหม
Souvik Pal

1

คุณสามารถลองแบบนี้

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"' 

โปรดทราบว่าหากโฟลเดอร์. ssh ไม่มีอยู่คำสั่งดังกล่าวจะล้มเหลว นอกจากนี้อาจเป็นการดีกว่าเมื่อสร้างไฟล์เพื่อตั้งค่าการอนุญาตขั้นต่ำที่เป็นไปได้ (โดยทั่วไปคือการอ่าน - เขียนสำหรับเจ้าของเท่านั้น) นี่คือคำสั่งขั้นสูงเพิ่มเติม:

cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'

หากต้องการทราบเพิ่มเติมเกี่ยวกับปัญหานี้คุณต้องไปที่เว็บไซต์นี้: ข้อผิดพลาดการเปลี่ยนคีย์โฮสต์ SSH

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