Saya telah ~/.ssh/config
mengkonfigurasi saya dengan berbagai host yang dapat diakses baik saat di VPN perusahaan kami, atau melalui server proxy SSH.
Saat ini saya baru saja punya
Host internal-server
ProxyCommand ssh -W internal.ip:22 external-server
Namun jika saya berada di jaringan internal saya dapat langsung mengakses ip internal, jadi proksi melalui server eksternal hanya menambah penundaan untuk menghubungkan.
Apakah ada cara saya dapat sementara proksi jika ip internal tidak dapat dijangkau, dan terhubung langsung sebaliknya?
%
karakter tersebut. Anda bisa menggunakan apa saja. Persentase digunakan karena tidak valid dalam nama host, atau nama pengguna. Thecut
perintah withing ProxyCommand menggunakan%
sebagai pembatas untuk menarik keluar nama host.ssh targetH
, yang berarti target dari rumah . Jika dalam jaringan lokal menargetkan, cukupssh target
. Sudah menyenangkan untuk mengatakan ini dengan lebih jelas dalam jawabannya.Saya menggunakan metode berbeda menggunakan Match. Dalam kasus saya, saya ingin menggunakan proxy lokal jika sedang berjalan, atau tidak, jika tidak. Arahan berikut menyelesaikan ini dengan baik:
Ini cocok dengan setiap upaya ssh, dan menjalankan pemeriksaan cepat menggunakan
nc
untuk melihat apakah proxy saya aktif dan berjalan pada 1086 (dalam hal ini,nc
keluar tanpa kesalahan). Jika itu terjadi, ia menetapkan ProxyCommand.sumber
Satu dekade yang lalu saya menulis perintah proxy untuk skenario semacam ini. Dalam kasus penggunaan Anda, perintah proxy saya dapat digunakan seperti ini:
Beberapa peringatan: Saya agak malu untuk mengakui, bahwa itu tidak menangani IPv6, dan bahwa itu hanya akan mencoba satu alamat IP per hostname. Juga, itu tidak akan mentransfer spanduk klien ke server sebelum spanduk server telah dikirim. Tapi itu tidak mungkin menyebabkan masalah.
sumber
Terima kasih untuk @ till's Answer , itu menginspirasi saya banyak.
Saya menemukan bahwa Anda dapat mengarahkan koneksi Anda dengan paksa
ProxyCommand nc dst dst-port
.Misalnya, Anda sebenarnya akan terhubung
B.com
jika menggunakanTapi
UserKnownHostsFile
masih akan mencatat sebagaiA.com
Jadi, Anda dapat menambahkan domain "otomatis" ke
ssh_config
Saya diganti
nc -w 1 %h %p
dengan(timeout 0.1 nc -z %h %p) && nc %h %p
, akan lebih cepat jika Anda dapat mencapai server internal kurang dari 100 ms.Atau Anda dapat diganti dengan
ping
, tetapi ini mungkin menunjukkan informasi yang buruk jika Anda menggunakan proxy berbasis TCP sepertiproxychains
, atau server tidak mengizinkan gema ICMP.Anda dapat mengganti
(timeout 0.1 nc -z %h %p)
dengan apa pun yang mendeteksi apakah Anda berada di server internal.Jika Anda memiliki beberapa IP kandidat, bahkan Anda dapat menggunakan ini:
Itu akan mencoba untuk terhubung
1.1.1.1
, jika gagal mencoba untuk terhubung2.2.2.2
, dan kemudian3.3.3.3
.sumber
Ini bekerja sedikit lebih otomatis dengan penundaan 1 detik tambahan kecil jika Anda tidak berada di belakang firewall dan firewall tidak menolak:
sumber
Saya biasanya akan membuat entri lain seperti ini -
Kemudian panggil saja yang Anda inginkan, tergantung pada lingkungan proxy Anda saat ini ..
sumber