Tergantung jaringan ~ / .ssh / config?

15

Di kantor, saya dapat terhubung ke mesin internal tanpa proxy, tetapi memerlukan proxy untuk koneksi eksternal. Di luar kantor, saya dapat terhubung ke mesin eksternal lain tanpa proxy, tetapi perlu menggunakan salah satu dari 2 proxy untuk terhubung ke mesin internal.

Jika saya dapat menemukan cara untuk mendeteksi secara otomatis jaringan apa yang saya gunakan, dapatkah saya menginstruksikan ssh untuk memuat file konfigurasi yang sesuai?

Jika tidak, apakah ada solusi yang lebih elegan daripada menulis skrip shell untuk symlink file konfigurasi yang sesuai ke ~ / .ssh / config (ide terbaik saya sejauh ini)?

Sunting: Saya pikir @pcm dan JonnyRo mengerti pertanyaan saya dan saya akan mencoba apa yang mereka sarankan, tetapi hanya untuk menjadi jelas, saya ingin

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

Jawaban:

11

Bergantung pada bagaimana proksi Anda dikonfigurasi, Anda bisa membuat entri konfigurasi SSH yang berfungsi di kedua situasi tersebut. Misalnya pada satu jaringan yang saya gunakan secara teratur, saya harus ssh ke host perantara sebelum saya dapat membuat koneksi keluar. Jadi pada dasarnya saya mengatur konfigurasi yang terlihat seperti ini.

# proxy ssh 
Host *%sshproxy
    ProxyCommand ssh [email protected] /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

Jadi ketika saya tidak perlu menggunakan proxy, saya bisa menjalankan perintah like ssh myhost.example.orgdan terhubung, tetapi ketika saya membutuhkan proxy, saya menjalankan perintah ssh myhost.example.org%sshproxy.

Saya menduga Anda mungkin dapat mengatur semacam pengaturan otomatis atau lengkap yang secara otomatis akan menambahkan %proxybit.

Sakit kepala
sumber
7

Anda dapat menggunakan opsi -F untuk memilih dari berbagai file konfigurasi. untuk dua kasus jaringan. Anda kemudian dapat membuat alias yang menggunakan file konfigurasi yang berbeda, berdasarkan pada jaring yang Anda pakai, atau dalam skrip login Anda, atur satu alias, berdasarkan alamat IP Anda.

pcm
sumber
Terima kasih! Alias ​​dengan -F pasti akan menjadi mundur saya jika saya tidak bisa membuat skrip bekerja berdasarkan IP.
Nate Parsons
Ini luar biasa, saya baru saja akan menanyakan pertanyaan yang sama. Saya sudah skrip beberapa opsi lain untuk mengatur variabel lingkungan ketika saya memulai terminal baru, saya dapat dengan mudah membuat alias atau symlink yang tepat .ssh / config berdasarkan pada lingkungan.
newz2000
7

Pertanyaan lama, tetapi beberapa ide di utas ini membantu saya dan ini adalah solusi yang saya buat:

Pertama, konfigurasi ssh server proxy .

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

Kemudian, konfigurasi Server 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

Idenya di sini adalah bahwa case default terhubung dari situs eksternal dan ProxyCommand memulai koneksi ssh ke proxy terlebih dahulu dan kemudian terhubung ke server-b . Jika, di sisi lain, kita sudah berada di subnet lokal, ProxyCommand dinonaktifkan dan tidak ada koneksi proxy ke server-a dibuat.

Terlepas dari di mana Anda berada, Anda selalu dapat mencapai server-abc dengan entri ini dan pengaturan ini menentukan di mana Anda berada dan mengatur koneksi yang sesuai. Untuk server-xyz , gunakan saja ide yang sama.

Saya membuat penjelasan yang lebih lengkap di sini: http://blog.kihltech.com/2017/04/ssh-conditional-host-address-based-on-network-or-location/

Robert Kihlberg
sumber
1

Tulis skrip shell yang memeriksa IP Anda terhadap suatu pola, lalu sambungkan skrip shell yang sesuai.

Jika karena alasan tertentu rentang IP Anda sama untuk rumah dan kantor, coba beralih berdasarkan /etc/resolv.conf, yang berisi server DNS yang dikonfigurasi DHCP.

JonnyRo
sumber
0

Opsi "Host" di .ssh / config memungkinkan Anda mengubah konfigurasi berdasarkan tujuan. Saya menggunakannya untuk menyesuaikan port forwarding dan semacamnya berdasarkan ke mana saya akan pergi.

JOTN
sumber
0

Saya telah melihat pertanyaan ini di masa lalu dan salah satu solusi yang mungkin adalah memiliki entri seperti itu di file konfigurasi:

Host ENTRY_POINT
Hostname ENTRY_POINT_FQDN
User USERNAME

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

Dengan cara ini, jika Anda berada di luar, Anda dapat $ ssh machine.inside_domain. Jika Anda berada di dalam dan memiliki penyelesaian dns, Anda dapat $ ssh mesin. Itu bekerja dengan baik untuk saya.

Mungkin seseorang dapat memperbaiki ide ini, mungkin mengubah konfigurasi DNS sehingga secara otomatis menyelesaikan mesin ke machine.inside_domain jika Anda berada di luar dan menggunakan titik masuk SSH.

Fernando
sumber