SSH ลงในกล่องที่มี IP ที่เปลี่ยนแปลงบ่อย


22

ฉันมีกล่องคลาวด์ที่เปลี่ยน IP บ่อยครั้ง

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

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is

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

คำตอบ:


20

แก้ไขไฟล์ ssh_config ของคุณและเพิ่มเปลี่ยนบรรทัดนี้:

CheckHostIP no

CheckHostIP ใช้ค่าเริ่มต้นเป็น 'ใช่' สิ่งนี้จะทำเพียงตรวจสอบชนิดที่คุณล้มเหลว การปิดเครื่องหมายความว่าจะเชื่อว่า IP เป็นตัวแปรและจะตรวจสอบคีย์กับชื่อโฮสต์


2
นี่เป็นการปิดใช้งานคุณลักษณะด้านความปลอดภัยสำหรับเซิร์ฟเวอร์ทั้งหมดที่คุณจะเชื่อมต่อซึ่งเป็นแนวปฏิบัติที่เลวร้าย คุณควรใช้ตัวเลือกนี้เฉพาะสำหรับโฮสต์ที่คุณรู้ว่าจะมีปัญหานี้หรือใช้ตัวเลือก HostKeyAlias ​​- อีกครั้งสำหรับโฮสต์ที่ระบุ
zaTricky

@zaTricky "การปฏิบัติที่ไม่ดีอย่างยิ่ง"? มีอะไรที่สุดโต่งเกี่ยวกับมันอืม ฉันคิดว่ามันปลอดภัยมากมันเป็นความชอบส่วนบุคคล คุณเพิ่งปักหมุดกุญแจไว้ที่ชื่อโฮสต์ (แทน IP) สำหรับ https HPKP ทำงานในลักษณะเดียวกันและทุกคนบอกว่าปลอดภัยหรือมีความปลอดภัยมากเกินไป
kubanczyk

@kancanczyk นี่เป็นการพูดเพื่อทำให้เป็นที่รู้จักทั่วโลก - ไม่มีคำแนะนำเกี่ยวกับการระบุโฮสต์ซึ่งฉันได้ชี้ให้เห็น
zaTricky

25

เพิ่มเติม: คุณสามารถลองปิดใช้งานการตรวจสอบ CheckHostIP สำหรับชื่อนั้นเท่านั้น :

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no

5
นี่เป็นตัวเลือกที่ดีที่สุดในการลดผลกระทบด้านความปลอดภัยของการปิดใช้งานการตรวจสอบ IP
Espo

3

คำตอบมากมายที่นี่จะได้ผล OpenSSH HostKeyAliasแล้วมีคุณลักษณะในตัวกับเรื่องนี้ในใจ:


ในไฟล์. ssh / config ของคุณเพิ่มลงHostKeyAlias <alias>ในการกำหนดค่าโฮสต์:

host myserver.example.com
HostKeyAlias myserver.example.com

ด้วยวิธีนี้ในสถานที่ที่เชื่อมต่อกับเซิร์ฟเวอร์myserver.example.comจะไม่ใช้ชื่อโฮสต์หรือที่อยู่ IP สำหรับการอ้างอิงในท้องถิ่น - มันจะเสมอเพียงใช้ HostKeyAlias ได้รับเมื่อเชื่อมต่อกับเซิร์ฟเวอร์ที่ สำหรับฉันมันสมเหตุสมผลที่จะใช้ชื่อโฮสต์ - แต่คุณสามารถใช้นามแฝงที่คุณชอบได้


การกำหนดค่าทั่วไปสำหรับตัวเองสำหรับโฮสต์แบบไดนามิกเป็นดังนี้:

host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com

สิ่งนี้สามารถใช้ในบางสถานการณ์ที่คลุมเครือซึ่งคุณรู้ว่าเซิร์ฟเวอร์ของคุณมีโฮสต์คีย์เดียวกัน (โดยทั่วไปไม่ควรเป็นกรณีนี้) ซึ่งจะป้องกันรายการที่ซ้ำกัน ในอนาคตหากคีย์เปลี่ยนตามกฎหมายคุณไม่จำเป็นต้องเปลี่ยน / ลบหลายรายการ เพียงคนเดียว เซิร์ฟเวอร์ Gitlab Geo เป็นตัวอย่างที่ดีของสิ่งนี้


เกี่ยวกับการล้างไฟล์ known_hosts ฉันขอแนะนำให้ดูคำถาม / คำตอบอื่น ๆ ที่เกี่ยวข้องกับการดูแล / ลบรายการเก่าที่รู้จัก ตัวอย่างเช่นดูวิธีการจัดการของฉันไฟล์ .ssh / known_hosts ; ฉันประทับใจเป็นอย่างยิ่งกับคำตอบของผู้ใช้ 19553828 แม้ว่าฉันจะเห็นว่ามันไม่มี upvotes มากมาย (แต่) :)


สิ่งนี้จะแสดงให้เห็นว่าคำตอบในวันเดียวกันนั้นมีมูลค่าเท่าใดเมื่อเทียบกับคำตอบที่ถูกต้องตอบ 8 ปีต่อมา
parity3

2

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

ssh remoteServerName -l username -o "UserKnownHostsFile=/dev/null"

คุณสามารถใช้สิ่งนี้ได้หากกุญแจยังคงเหมือนเดิม แต่การเปลี่ยนแปลง IP:

ssh remoteServerName -l username -o "CheckHostIP=no"

หากเซิร์ฟเวอร์ของคุณเปลี่ยนรหัสโฮสต์ที่บ่อยครั้งคุณควรพิจารณาการตั้งค่าการลงนามคีย์โฮสต์
Cameron Tacklind

1

คุณสามารถตั้งค่า StrictHostKeyChecking = no ในการกำหนดค่าไคลเอนต์ ssh ของคุณ(เช่นไฟล์ ~ / ssh / config บนเครื่องที่คุณเชื่อมต่อจาก) เพื่อละเว้นคำเตือน


1

คุณสามารถใส่CheckHostIP noลงใน~/.ssh/configไฟล์ของคุณได้แต่นั่นทำให้คุณเปิดการโจมตีด้วยการปลอมแปลง หากคุณไม่กังวลเกี่ยวกับเรื่องนั้นการตั้งค่านี้ควรปิดการknown_hostsตรวจสอบ


0

ฉันหลีกเลี่ยงการเพิ่มลายนิ้วมือลงในknown_hostsไฟล์ของฉันเมื่อเชื่อมต่อกับเครื่อง AWS ชั่วคราว ฉันใช้คำสั่งเช่น

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i secret.pem ec2-user@10.0.0.5

เพื่อเชื่อมต่อกับพวกเขา จะไม่ถามคุณว่าคุณต้องการเพิ่มเครื่อง“ ลงในรายการโฮสต์ที่รู้จักหรือไม่” แทนที่10.0.0.5ด้วยที่อยู่ IP ของเครื่องของคุณและsecret.pemตามเส้นทางแบบเต็มของคีย์ Ssh ของคุณ คุณจะยังคงได้รับการเตือนว่าการ10.0.0.5ได้รับการเพิ่ม /dev/nullแต่มันหายไปจริงๆเป็น ฉันทำสิ่งนี้บ่อยพอที่จะตั้งชื่อแทนในตัวฉัน~/.profile

alias awsssh='ssh -i secret.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

ฉันจองssh ec2-user@example.comคำสั่งประเภทของเครื่องจักรฉันพบปัญหาในการตรวจสอบลายนิ้วมือ


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

-2

ทำให้เป็นที่รู้จัก _ โฮสต์อ่านอย่างเดียว


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