Phụ thuộc vào mạng ~ / .ssh / config?


15

Trong văn phòng, tôi có thể kết nối với các máy nội bộ mà không cần proxy, nhưng cần proxy cho các kết nối bên ngoài. Bên ngoài văn phòng, tôi có thể kết nối với các máy bên ngoài khác mà không cần proxy, nhưng cần sử dụng một trong 2 proxy để kết nối với các máy bên trong.

Nếu tôi có thể tìm ra cách tự động phát hiện mạng tôi đang sử dụng, tôi có thể hướng dẫn ssh tải tệp cấu hình phù hợp không?

Nếu không, có một giải pháp nào tao nhã hơn là viết một kịch bản shell để liên kết tệp cấu hình phù hợp với ~ / .ssh / config (ý tưởng tốt nhất của tôi cho đến nay)?

Chỉnh sửa: Tôi nghĩ @pcm và JonnyRo hiểu câu hỏi của tôi và tôi sẽ thử những gì họ đề xuất, nhưng để rõ ràng, tôi muốn

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

Câu trả lời:


11

Tùy thuộc vào cách proxy của bạn được định cấu hình, bạn chỉ cần tạo một mục cấu hình SSH hoạt động trong cả hai trường hợp. Ví dụ: trên một mạng tôi thường xuyên sử dụng, tôi phải ssh đến một máy chủ trung gian trước khi tôi có thể thực hiện kết nối ra ngoài. Vì vậy, về cơ bản tôi thiết lập một cấu hình trông như thế này.

# 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

Vì vậy, khi tôi không cần sử dụng proxy, tôi chỉ cần chạy một lệnh như ssh myhost.example.orgvà được kết nối, nhưng khi tôi cần proxy, tôi chạy lệnh ssh myhost.example.org%sshproxy.

Tôi nghi ngờ bạn có thể thiết lập một số loại bí danh hoặc cài đặt tự động hoàn thành sẽ tự động nối thêm %proxybit.


8

Câu hỏi cũ, nhưng một số ý tưởng trong chủ đề này đã giúp tôi và đây là một giải pháp tôi đã đưa ra:

Đầu tiên, cấu hình ssh máy chủ proxy .

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

Sau đó, cấu hình Máy chủ 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

Ý tưởng ở đây là trường hợp mặc định đang kết nối từ một trang bên ngoài và ProxyCommand khởi tạo kết nối ssh thành proxy trước rồi kết nối với máy chủ-b . Mặt khác, nếu chúng ta đã nằm trên mạng con cục bộ, ProxyCommand bị vô hiệu hóa và không có kết nối proxy nào đến máy chủ-a được tạo.

Bất kể bạn đang ở đâu, bạn luôn có thể truy cập máy chủ abc bằng mục này và thiết lập này chỉ ra bạn đang ở đâu và thiết lập kết nối tương ứng. Đối với máy chủ-xyz , chỉ cần sử dụng cùng một ý tưởng.

Tôi đã giải thích kỹ hơn ở đây: http://blog.kihltech.com/2017/04/ssh-conditable-host-address-basing-on-network-or-location/


7

Bạn có thể sử dụng tùy chọn -F để chọn từ các tệp cấu hình khác nhau. cho hai trường hợp mạng. Sau đó, bạn có thể tạo các bí danh sử dụng các tệp cấu hình khác nhau, dựa trên mạng bạn đang sử dụng hoặc trong tập lệnh đăng nhập của bạn thiết lập một bí danh, dựa trên địa chỉ IP của bạn.


Cảm ơn! Bí danh với -F chắc chắn sẽ là dự phòng của tôi nếu tôi không thể có được một tập lệnh hoạt động dựa trên IP.
Nate Parsons

Điều này thật tuyệt vời, tôi chỉ định hỏi cùng một câu hỏi. Tôi đã kịch bản một số tùy chọn khác để đặt các biến môi trường khi tôi khởi động một thiết bị đầu cuối mới, tôi có thể dễ dàng tạo bí danh hoặc liên kết tượng trưng .ssh / config thích hợp dựa trên môi trường.
newz2000

1

Viết tập lệnh shell kiểm tra IP của bạn theo một mẫu, sau đó liên kết các tập lệnh shell phù hợp.

Nếu vì một lý do nào đó, phạm vi IP của bạn giống nhau cho gia đình và cơ quan, hãy thử chuyển đổi dựa trên /etc/resolv.conf, nơi chứa các máy chủ DNS được định cấu hình DHCP.


0

Tùy chọn "Máy chủ" trong .ssh / config cho phép bạn thay đổi cấu hình dựa trên đích. Tôi sử dụng điều đó để điều chỉnh chuyển tiếp cổng và như vậy dựa trên nơi tôi sẽ đến.


0

Tôi đã xem xét câu hỏi này trong quá khứ và một giải pháp khả thi là có mục như vậy trong tệp cấu hình:

Host ENTRY_POINT
Hostname ENTRY_POINT_FQDN
User USERNAME

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

Bằng cách này, nếu bạn ở bên ngoài, bạn có thể $ ssh machine.inside_domain. Nếu bạn đang ở trong và có dns giải quyết, bạn có thể $ ssh máy. Điều đó làm việc tốt cho tôi.

Có lẽ ai đó có thể cải thiện ý tưởng này, có thể thay đổi cấu hình DNS để nó tự động phân giải máy thành machine.inside_domain nếu bạn ở bên ngoài và sử dụng điểm nhập SSH.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.