มีวิธีง่าย ๆ ในการอัปเดตข้อมูลใน known_hosts เมื่อคุณรู้ว่าคีย์โฮสต์เปลี่ยนไปหรือไม่?


38

หากระบบปฏิบัติการของโฮสต์ได้รับการติดตั้งใหม่และมีการสร้างรหัสสาธารณะขึ้นใหม่จะทำให้ระบบไม่ทำงานเนื่องจากรหัสใหม่ไม่ตรงกับรหัสเดิม

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


นี้ซ้ำคำถามเกี่ยวกับ superuser ดูข้อมูลรายละเอียดเพิ่มเติมที่นั่น
Yitz

คำตอบ:


59

ใช้ssh-keygen -R hostnameเพื่อลบชื่อโฮสต์ออกจากไฟล์ known_hosts ของคุณ ในครั้งต่อไปที่คุณเชื่อมต่อคีย์โฮสต์ใหม่จะถูกเพิ่มลงในไฟล์ known_hosts ของคุณ


12
TARGET_HOST=[hostname or IP]

# Remove the old key(s) from known_hosts
ssh-keygen -R $TARGET_HOST

# Add the new key(s) to known_hosts (and also hash the hostname/address)
ssh-keyscan -H $TARGET_HOST >> ~/.ssh/known_hosts

ครั้งต่อไปที่คุณเชื่อมต่อคุณจะเชื่อมต่อโดยไม่ถูกถามAre you sure you want to continue connecting (yes/no)?เนื่องจากกุญแจจะอยู่ในknown_hostsไฟล์แล้ว


1
ดูStrictHostKeyCheckingใน ~ / .ssh / config ด้วย
Jeff Schaller

1
ฉันจะใช้ชื่อตัวแปรที่แตกต่างกัน .... โฮสต์อยู่ในเชลล์บางตัวที่ให้ชื่อโฮสต์ของคุณเองดังนั้นฉันไม่ต้องการแก้ไขมัน (ฉันรู้ว่ามันสามารถออกแล้วหรือออกจาก subshell แต่ยังคง ทำไมไม่ลองthehostแทนล่ะหรือบางอย่างตัวแปร ALLCAPS อาจชนกับชื่อภายในที่สงวนไว้ชื่อ smallcase ไม่ควร)
Olivier Dulac

คีย์เหล่านี้ใน known_hosts นำหน้าด้วยบางสิ่งซึ่งเริ่มต้นด้วย | 1 | สิ่งนั้นไม่ได้ถูกผนวกเข้ากับไฟล์ด้วยวิธีนี้หรือฉันผิด ความแตกต่างคืออะไรเพราะสิ่งที่ ssh-keyscan ส่งกลับไม่ได้ขึ้นต้นด้วย | 1 |
Daniel F

1
(@ DanielF +) ถ้าคุณใช้รูปแบบแฮชและได้รับการยอมรับที่สำคัญ (s) ในsshมีรายการแยกต่างหากสำหรับชื่อโฮสต์และที่อยู่ (e) ของคุณจึงควรssh-keygen -R แต่ละของพวกเขาที่จะหลีกเลี่ยงความขัดแย้ง
dave_thompson_085
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.