SSH: โฮสต์ที่รู้จักพร้อมที่อยู่แบบไดนามิก


12

ฉันต้องเชื่อมต่อกับโฮสต์ด้วยที่อยู่ IP แบบไดนามิก

ทุกครั้งที่มีการเปลี่ยนแปลง IP SSH จะขอให้ฉันตรวจสอบลายนิ้วมือ:

The authenticity of host '...' can't be established.
RSA key fingerprint is ....
Are you sure you want to continue connecting (yes/no)?

เป็นไปได้ไหมที่จะส่ง SSH กุญแจสาธารณะของโฮสต์เพื่อให้:

  1. SSH ตรวจสอบความถูกต้องของโฮสต์โดยอัตโนมัติ
  2. รหัสโฮสต์จะไม่ถูกเก็บไว้ในไฟล์ known_hosts

คำถามนี้แตกต่างจากฉันจะหลีกเลี่ยงการตรวจสอบโฮสต์ของ SSH สำหรับโฮสต์ที่รู้จักได้อย่างไร ตั้งแต่ที่คำถามอื่น ๆ ที่มีจุดมุ่งหมายเพื่อการตรวจสอบปราบปราม SSH ในขณะที่ฉันไม่ได้ต้องการที่จะระงับมัน: ฉันไม่ต้องการที่จะมีเจ้าภาพรับรองความถูกต้องเพียงแค่ใช้กุญแจสาธารณะของโฮสต์ (ซึ่งผมรู้และมีมันเก็บไว้ในแฟ้ม) มากกว่า SSH known_hostsไฟล์.

สำหรับฉันคำถามอื่น ๆ ดูเหมือนจะเกี่ยวกับการเชื่อมต่อกับเซิร์ฟเวอร์ที่แตกต่างกันทุกครั้งแทนที่จะเชื่อมต่อกับเซิร์ฟเวอร์ที่รู้จักกันดีที่มี IP แบบไดนามิก

คำตอบ:


8

ทางออกที่ดีที่สุด (คือใกล้เคียงกับที่ฉันต้องการ) ฉันสามารถหาได้คือใช้ตัวเลือกHostKeyAlias: มันจะใช้ชื่อโฮสต์ที่ฉันระบุเพื่อเข้าถึงknown_hosts(แทนที่จะเป็น IP ที่ฉันกำลังเชื่อมต่อ)

ฉันจะต้องเพิ่มกุญแจสาธารณะของโฮสต์เพื่อknown_hostsใช้ชื่อโฮสต์ที่กำหนด (เช่น:) myhostแล้วเชื่อมต่อกับมันโดยใช้:

ssh -o 'HostKeyAlias myhost' ...

ฉันรู้ว่ามันใช้เวลาซักพัก แต่: ถ้าสิ่งนี้ดีที่สุดตอบคำถามของคุณโปรดยอมรับมัน
kittykittybangbang

หมายเหตุสำหรับคนอื่น ๆ : คุณสามารถเพิ่มHostKeyAliasค่ากำหนดลงใน~/.ssh/configไฟล์ของคุณหรือแม้แต่กับ/etc/ssh/ssh_configไฟล์ทั่วโลก
kael

6

known_hostsไฟล์ไม่ได้เป็นเพียงที่สำคัญก็ยังมีชื่อโฮสต์ที่คุณใช้ในการเชื่อมต่อและถ้าเป็นไปได้ IP ที่สอดคล้อง นี่คือสาเหตุที่คุณเห็นข้อผิดพลาดมันกำลังเปรียบเทียบ triplet ที่ได้รับจากเซิร์ฟเวอร์กับสิ่งที่คุณเก็บไว้ในไฟล์รู้จัก _host

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


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

และถึงกระนั้นฉันก็ไม่ชอบมันถ้าฉันจะต้องซื่อสัตย์ ใช้ธงว่า SSH known_hostsจะยังคงเข้าถึง ทำไม? ฉันไม่สามารถพูดว่า "ssh เชื่อมต่อกับ X ซึ่งมีรหัสสาธารณะคือ Y" ได้หรือไม่? ทำไมจะไม่ล่ะ? จะไม่แน่ใจ 100%
peoro

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