ฉันจะจับคู่ช่วง CIDR สำหรับรายการโฮสต์การกำหนดค่า SSH ได้อย่างไร


22

ฉันกำลังมองหาวิธีใช้บล็อก CIDR เฉพาะเพื่อจับคู่โฮสต์ในการกำหนดค่าไคลเอ็นต์ SSH (ปกติ~/.ssh/config) ตัวอย่างเช่นฉันมีรายการที่จะส่งต่อการรับส่งข้อมูลทั้งหมดผ่านโฮสต์ป้อมปราการหาก IP อยู่ในช่วงที่แน่นอนสมมติว่า10.1.0.0/16:

host 10.1.*
    proxycommand ssh -q bastion -W %h:%p

มันใช้งานได้ดีมาก แต่เมื่อฉันเพิ่มบางช่วงที่ไม่ตรงกับเครื่องหมายจุดจริงๆ?

# doesn't work, unfortunately
host 10.2.0.0/18
    proxycommand ssh -q bastion-foo -W %h:%p
host 10.2.64.0/18
    proxycommand ssh -q bastion-bar -W %h:%p

มีบางอย่างในคู่มือที่ฉันพลาดหรือเคล็ดลับการเขียนสคริปต์อย่างชาญฉลาดที่จะเปิดใช้งานการจับคู่ช่วง IP โฮสต์เหล่านี้หรือไม่

คำตอบ:


24

การจับคู่กับรูปแบบในไฟล์ ssh_config นั้นเป็นการจับคู่รูปแบบพื้นฐานไม่ใช่การจับคู่เครือข่าย / CIDR ดังนั้นการใช้สัญกรณ์ CIDR จะไม่ทำงาน

หน้าคนอธิบายว่า:

รูปแบบประกอบด้วยอักขระที่ไม่ใช่ช่องว่างศูนย์หรือมากกว่า*(อักขระตัวแทนที่ตรงกับศูนย์หรือมากกว่าอักขระ) หรือ?(อักขระตัวแทนที่ตรงกับอักขระหนึ่งตัว)

วิธีที่ดีที่สุดที่คุณสามารถทำได้คือใช้รายการรูปแบบมากกว่าหนึ่งรูปแบบ อีกครั้งจากหน้าคู่มือ:

รายการรูปแบบเป็นรายการของรูปแบบที่คั่นด้วยเครื่องหมายจุลภาค รูปแบบภายในรายการรูปแบบอาจถูกลบล้างโดยนำหน้าด้วยเครื่องหมายอัศเจรีย์ ( !)

ดังนั้นเพื่อครอบคลุมอวนสอง / 18 ของคุณคุณจะต้องแสดงรายการ:

  • โฮสต์ทั้งหมดที่ตรงกัน10.2.?.*(เช่น 10.2.0.0–10.2.9.255)
  • โฮสต์ทั้งหมดที่ตรงกัน10.2.??.*(เช่น 10.2.10.0–10.2.99.255)
  • โฮสต์ทั้งหมดที่ตรงกัน10.2.10?.*(เช่น 10.2.100.0–10.2.109.255)
  • โฮสต์ทั้งหมดที่ตรงกัน10.2.11?.*(เช่น 10.2.110.0–10.2.119.255)
  • โฮสต์ทั้งหมดที่ตรงกัน10.2.12?.*ยกเว้นผู้ที่ตรงกัน10.2.128.*และ10.12.129.*(และโปรดจำไว้ว่าการยกเว้นต้องมาก่อน!)

รายการรูปแบบของคุณควรมีลักษณะดังนี้:

Host "10.2.?.*","10.2.??.*", "10.2.10?.*","10.2.11?.*","!10.2.128.*","!10.2.129.*","10.2.12?.*"

4
เพื่อความแม่นยำนี่ไม่ใช่การแสดงออกปกติมันเป็นสัญลักษณ์ตัวแทนกลม
Gabor Garami

1
ขอบคุณสำหรับคำตอบมันเกือบจะได้ผลสำหรับฉัน แต่จริง ๆ แล้วฉันต้องการแยกความแตกต่างระหว่างสองช่วงด้วยhostรายการแยกต่างหาก นอกจากนี้ยังต้องการการเสนอราคาแยกกัน (ssh / Mac) สั้นที่สุดที่ฉันสามารถหา: host "10.2.?.*", "10.2.??.*", "!10.2.64*", "!10.2.65*", "!10.2.66*", "!10.2.67*", "!10.2.68*", "!10.2.69*", "!10.2.7*", "!10.2.8*", "!10.2.9*" และ host "10.2.??.*", "10.2.10?.*", "10.2.11?.*", "10.2.12?.*", "!10.2.1?.*", "!10.2.2?.*", "!10.2.3?.*", "!10.2.4?.*", "!10.2.5?.*", "!10.2.60.*", "!10.2.61.*", "!10.2.62.*", "!10.2.63.*", "!10.2.128.*", "!10.2.129.*"
fazy

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