GNU/Linux >> Belajar Linux >  >> Linux

Melewati variabel dalam perintah ssh jarak jauh

Daftar variabel lingkungan yang diterima di SSHD secara default menyertakan LC_* . Jadi:

LC_MY_BUILDN="1.2.3" ssh -o "SendEnv LC_MY_BUILDN" ssh-host 'echo $LC_MY_BUILDN'
1.2.3

Variabel dalam tanda kutip tunggal tidak dievaluasi. Gunakan tanda kutip ganda:

ssh [email protected] "~/tools/run_pvt.pl $BUILD_NUMBER"

Shell akan memperluas variabel dalam tanda kutip ganda, tetapi tidak dalam tanda kutip tunggal. Ini akan berubah menjadi string yang Anda inginkan sebelum diteruskan ke ssh perintah.


Jika Anda menggunakan

ssh [email protected] "~/tools/run_pvt.pl $BUILD_NUMBER"

bukannya

ssh [email protected] '~/tools/run_pvt.pl $BUILD_NUMBER'

shell Anda akan menginterpolasi $BUILD_NUMBER sebelum mengirim string perintah ke host jarak jauh.


(Jawaban ini mungkin tampak rumit, tetapi sejauh yang saya tahu, ini mudah diperluas dan kuat terkait spasi dan karakter khusus.)

Anda dapat memasukkan data langsung melalui input standar ssh perintah dan read itu dari lokasi yang jauh.

Dalam contoh berikut,

  1. array yang diindeks diisi (untuk kenyamanan) dengan nama variabel yang nilainya ingin Anda ambil di sisi jarak jauh.
  2. Untuk masing-masing variabel tersebut, kami memberikan ssh baris yang diakhiri null yang memberikan nama dan nilai variabel.
  3. Dalam shh perintah itu sendiri, kita mengulangi baris-baris ini untuk menginisialisasi variabel yang diperlukan.
# Initialize examples of variables.
# The first one even contains whitespace and a newline.
readonly FOO=$'apjlljs ailsi \n ajlls\t éjij'
readonly BAR=ygnàgyààynygbjrbjrb

# Make a list of what you want to pass through SSH.
# (The “unset” is just in case someone exported
# an associative array with this name.)
unset -v VAR_NAMES
readonly VAR_NAMES=(
    FOO
    BAR
)

for name in "${VAR_NAMES[@]}"
do
    printf '%s %s\0' "$name" "${!name}"
done | ssh [email protected] '
    while read -rd '"''"' name value
    do
        export "$name"="$value"
    done

    # Check
    printf "FOO = [%q]; BAR = [%q]\n" "$FOO" "$BAR"
'

Keluaran:

FOO = [$'apjlljs ailsi \n ajlls\t éjij']; BAR = [ygnàgyààynygbjrbjrb]

Jika Anda tidak perlu export itu, Anda harus dapat menggunakan declare bukannya export .

Versi yang sangat disederhanakan (jika Anda tidak memerlukan ekstensibilitas, memiliki satu variabel untuk diproses, dll.) akan terlihat seperti:

$ ssh [email protected] 'read foo' <<< "$foo"

Linux
  1. Jalankan Perintah Di Terminal Aktif Jarak Jauh?

  2. Ssh – Melewati Kata Sandi ke Skrip?

  3. Bagaimana Argumen Baris Perintah Jarak Jauh Ssh Diurai?

  1. Menjalankan Perintah Jarak Jauh Pada Koneksi Ssh, Sebelum Masuk?

  2. Penanganan Ctrl-c Dalam Sesi Ssh?

  3. Izinkan Akses Ssh Jarak Jauh?

  1. Perintah SCP Linux – Cara Transfer File SSH dari Jarak Jauh ke Lokal

  2. bash tidak memuat node pada perintah ssh jarak jauh

  3. Cara mengeksekusi perintah ssh dari jarak jauh perintah sudo tanpa kata sandi