Pertanyaan ini sudah ada jawabannya di sini:
Bagaimana saya bisa meneruskan nilai ke perintah ssh, sehingga lingkungan yang dimulai pada mesin host dimulai dengan variabel lingkungan tertentu yang disetel ke pilihan saya?
EDIT: Tujuannya adalah untuk melewatkan desktop kde saat ini (dari dcop kwin KWinInterface currentDesktop) ke shell baru yang dibuat sehingga saya dapat mengirimkan kembali lokasi nfs ke instance JEdit saya di server asli yang unik untuk setiap desktop KDE. (Menggunakan mekanisme seperti emacsserver / emacsclient )
Alasan beberapa instance ssh dapat terbang dalam satu waktu adalah karena ketika saya mengatur lingkungan saya, saya membuka banyak instance ssh berbeda untuk mesin yang berbeda.
sumber
The
SendEnv
pilihan adalah cowok Anda.~ / .ssh / config: (lokal)
/ etc / ssh / sshd_config: (di ujung remote)
Sekarang, berapapun nilai
$MYVAR
lokalnya, ia juga tersedia di sesi jarak jauh.Jika Anda masuk berkali-kali, setiap sesi akan memiliki salinannya sendiri
$MYVAR
, dengan nilai yang mungkin berbeda.~/.ssh/environment
dimaksudkan untuk tujuan lain. Ini semacam bertindak sebagai$ENV
file ketika menjalankan perintah non-shell dari jarak jauh.sumber
ssh myserver -o SendEnv="MYVAR"
, sehingga Anda dapat membuatnya dinamis dalam skrip.Anda bisa memberikan nilai dengan perintah yang mirip seperti berikut:
Anda dapat menguji dengan:
Pada tcsh hal-hal berikut tampaknya berfungsi:
sumber
&&
). Menggunakan bash,export VAR=value;
bukannya setenv dalam bentuk ketiga berfungsi untuk kasus ini.ssh user@host "$(<env_to_source.sh) command ..."
. Dalam env ke sumber, saya punyaexport var=value ;
di baris yang berbeda (ingat titik koma).Ada juga hack yang mengerikan.
Jika skrip Anda menggunakan variabel pada ujung jarak jauh (mis. Anda dapat memberi nama apa pun yang Anda inginkan), Anda dapat menyalahgunakan variabel lokal. Variabel apa pun dari formulir LC_ * akan diteruskan pada kata demi kata, tanpa persyaratan untuk konfigurasi apa pun.
Sebagai contoh, kami memiliki serangkaian server benteng di salah satu klien saya. Aku benci harus terhubung ke sana, hanya untuk terhubung ke server lain ... dan server lain ... setiap saat. Saya memiliki skrip yang berperilaku seperti SSH, kecuali bahwa itu pintar.
Pada dasarnya, jika LC_BOUNCE_HOSTS disetel, LC_BOUNCE_HOSTS diatur dan memisahkan host pertama. Kemudian memantul dan menjalankan skrip yang sama. Pada node tujuan, daftar ini pada akhirnya kosong, sehingga menjalankan perintah. Saya juga memiliki mode debug (yang sangat bagus selama masalah jaringan), yang diatur oleh LC_BOUNCE_DEBUG. Karena ssh meneruskan semua ini untuk saya secara ajaib, saya tidak perlu melakukan apa pun selain mengenali akhir dari daftar host (yang saya lakukan dengan opsi -).
Saya merasa kotor setiap kali saya menggunakan ini, tetapi bekerja di mana-mana saya sudah mencobanya.
sumber
ProxyCommand
opsi bawaan OpenSSH ? Edit~/.ssh/config
dan tambahkan blok sepertiHost *.example.com: ProxyCommand -ssh -W %h:%p bastionhost
dan biarkan terowongan koneksi Anda untuk Anda.Pada bash saya diuji dengan:
sumber