Saya harus mengelola setumpuk host lebih dari ssh. Namun saya hanya dapat mengaksesnya melalui server ssh gateway tertentu.
Saya memiliki yang berikut ini di ~/.ssh/config
:
Host mygateway-www
Hostname www
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22
Namun saya harus terhubung ke banyak mesin ini. Alih-alih meletakkan lusinan entri di saya ~/.ssh/config
, apakah ada saya bisa memiliki sesuatu seperti ini:
Host mygateway-*
Hostname ???WHAT GOES HERE????
IdentityFile ~/.ssh/id_rsa
ProxyCommand ssh mygateway nc %h 22
Saya tahu Anda bisa menggunakannya %h
dalam Hostname
argumen, tapi itu akan menjadi nama host. Yang benar-benar saya butuhkan adalah semacam substitusi string, seperti bash ${VAR%thingie}
. Apakah ini mungkin?
Sepertinya tidak ada cara untuk melakukan ini.
sumber
Saya memiliki masalah yang sama dan akhirnya menulis naskah yang menghasilkan semua pelat untuk saya. Saya tidak lagi mengubah ~ / ssh / config, saya mengubah ~ / ssh / config.in dan jalankan kembali skrip saya.
sumber
.ssh/config.d
file untuk setiap template, di mana setiap template akan menghasilkan satu atau lebih entri di final~/.ssh/config
. Akan ada file dengan variabel universal, tetapi masing-masing template dapat memiliki variabel sendiri yang akan diutamakan daripada global, terdaftar di bagian atas. The~/.ssh/config
file yang bisa dihasilkan pada permintaan atau pada jadwal-akan tidak peduli-selama Anda tidak pernah membuat suntingan langsung untuk itu bahwa Anda ingin melestarikan.Abaikan menentukan menimpa nama host secara langsung melalui
Hostname
deklarasi dan alih-alih tentukan saat runtime. Lakukan ini dengan mengevaluasinya sebagai bagian dariProxyCommand
, gunakan%h
untuk merujuknya pada perintah (juga gunakan%p
bukan port hardcoding sebagai 22) yaituSeseorang bahkan dapat memiliki bait yang lebih umum, di mana Anda dapat menentukan host apa pun tanpa
-
hanya diperlakukan sebagaimana adanya, atau sesuai bait yang cocok lainnya, tetapi memiliki-
pendekatan generik untuk menentukan<gateway>-<target>
:Selain itu, versi yang lebih baru dari klien SSH mendukung
[-W host:port]
opsi untuk secara langsung melakukan fungsi yang sama dengannc
(netcat). Dengan demikian, kita dapat menggunakan yang dimodifikasi:Tentu saja, jika Anda memiliki daftar host yang terbatas, Anda selalu dapat melakukannya:
Semoga ini membantu!
sumber
Saya punya klien dengan pengaturan yang sama dan saya menggunakan DSSH untuk menyelesaikan masalah saya.
DSSH antara lain memungkinkan Anda untuk masuk secara transparan ke host jarak jauh melalui host gateway.
Gunakan kasing
sumber