ขึ้นอยู่กับเครือข่าย ~ / .ssh / config


15

ในสำนักงานฉันสามารถเชื่อมต่อกับเครื่องภายในโดยไม่ต้องใช้พรอกซี แต่ต้องการพร็อกซีสำหรับการเชื่อมต่อภายนอก นอกสำนักงานฉันสามารถเชื่อมต่อกับเครื่องภายนอกอื่น ๆ โดยไม่ต้องใช้พรอกซี แต่ต้องใช้หนึ่งใน 2 พร็อกซีเพื่อเชื่อมต่อกับเครื่องภายใน

หากฉันสามารถหาวิธีที่จะตรวจสอบเครือข่ายที่ฉันใช้อยู่โดยอัตโนมัติฉันสามารถสั่งให้ ssh โหลดไฟล์กำหนดค่าที่เหมาะสมได้หรือไม่

ถ้าไม่มีวิธีแก้ปัญหาที่สง่างามกว่าการเขียนเชลล์สคริปต์เพื่อเชื่อมโยงไฟล์ปรับแต่งที่เหมาะสมกับ ~ / .ssh / config (ความคิดที่ดีที่สุดของฉันจนถึงตอนนี้)

แก้ไข: ฉันคิดว่า @pcm และ JonnyRo เข้าใจคำถามของฉันและฉันจะลองสิ่งที่พวกเขาแนะนำ แต่เพื่อให้ชัดเจนฉันต้องการ

|--------\    Dest   | abc.example.com | xyz.external.org |
| Source  \---------\|                 |                  |
|--------------------+-----------------+------------------|
| example.com office | No Proxy        | Proxy            |
| outside            | Proxy           | No Proxy         |

คำตอบ:


11

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

# proxy ssh 
Host *%sshproxy
    ProxyCommand ssh user@proxyhost.example.org /bin/netcat -w 1 $(echo %h | cut -d%% -f1) 22

Host myhost.example.org
    HostName 172.16.24.1

Host otherhost.example.com
    HostName 192.168.57.12

ดังนั้นเมื่อผมไม่จำเป็นต้องใช้พร็อกซี่ผมก็สามารถเรียกใช้คำสั่งเหมือนssh myhost.example.orgและได้รับการเชื่อมต่อ ssh myhost.example.org%sshproxyแต่เมื่อฉันจะต้องพร็อกซี่ที่ฉันเรียกใช้คำสั่ง

ฉันสงสัยว่าคุณอาจตั้งค่านามแฝงหรือการตั้งค่าอัตโนมัติที่สมบูรณ์ซึ่งจะผนวก%proxyบิตโดยอัตโนมัติ


9

คำถามเก่า แต่ความคิดบางอย่างในชุดข้อความนี้ช่วยฉันได้และนี่เป็นวิธีแก้ปัญหาที่ฉันได้มา:

ก่อนกำหนดค่าพร็อกซีเซิร์ฟเวอร์ ssh

Match Originalhost proxy Exec "ifconfig | grep 10.0.1"
     Hostname 10.0.1.2
Host proxy 
     Hostname external.hostname.com

จากนั้นกำหนดค่าเซิร์ฟเวอร์ B :

Match Originalhost server-b Exec "ifconfig | grep 10.0.1"
     ProxyCommand none
Host server-b
     Hostname 10.0.1.3
     ProxyCommand ssh -W %h:%p server-a

ความคิดที่นี่คือกรณีที่เริ่มต้นจะเชื่อมต่อจากเว็บไซต์ภายนอกและ ProxyCommand เริ่มต้นการเชื่อมต่อ SSH เพื่อพร็อกซี่แรกแล้วเชื่อมต่อกับเซิร์ฟเวอร์-B หากในมืออื่น ๆ ที่เราจะอยู่บนเครือข่ายย่อยในท้องถิ่นที่มีอยู่แล้วที่ ProxyCommand จะปิดและไม่มีการเชื่อมต่อพร็อกซีเซิร์ฟเวอร์-Aจะทำ

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

ฉันได้อธิบายอย่างละเอียดมากขึ้นที่นี่: http://blog.kihltech.com/2017/04/ssh-conditional-host-address-based-on-network-or-location/


7

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


ขอบคุณ! ชื่อแทนด้วย -F จะเป็นทางเลือกของฉันอย่างแน่นอนหากฉันไม่สามารถเรียกใช้สคริปต์จาก IP ได้
Nate Parsons

มันยอดเยี่ยมฉันเพิ่งจะถามคำถามเดียวกัน ฉันได้สคริปต์ตัวเลือกอื่น ๆ เพื่อตั้งค่าตัวแปรสภาพแวดล้อมเมื่อฉันเริ่มเทอร์มินัลใหม่ฉันสามารถสร้างนามแฝงหรือ symlink ที่เหมาะสม. ssh / config ตามสภาพแวดล้อม
newz2000

1

เขียนเชลล์สคริปต์ที่ตรวจสอบ IP ของคุณจากรูปแบบจากนั้นเชื่อมโยงเชลล์สคริปต์ที่เหมาะสม

หากด้วยเหตุผลบางประการช่วง IP ของคุณเหมือนกันสำหรับบ้านและที่ทำงานให้ลองสลับตาม /etc/resolv.conf ซึ่งมีเซิร์ฟเวอร์ DNS DHCP ที่กำหนดค่าไว้


0

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


0

ฉันเคยตรวจสอบคำถามนี้ในอดีตและวิธีแก้ไขปัญหาหนึ่งที่เป็นไปได้คือมีรายการดังกล่าวในไฟล์ config:

Host ENTRY_POINT
Hostname ENTRY_POINT_FQDN
User USERNAME

Host *.INSIDE_DOMAIN
ProxyCommand ssh ENTRY_POINT nc %h %p

วิธีนี้ถ้าคุณอยู่ข้างนอกคุณสามารถ $ ssh machine.inside_domain หากคุณอยู่ข้างในและมีการแก้ไข DNS คุณสามารถ $ ssh machine ได้ มันใช้งานได้ดีสำหรับฉัน

อาจมีใครบางคนสามารถปรับปรุงตามแนวคิดนี้ได้อาจเปลี่ยนการกำหนดค่า DNS เพื่อแก้ไขเครื่องเป็น machine.inside_domain โดยอัตโนมัติหากคุณอยู่ข้างนอกและใช้จุดเข้า SSH

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