GNU/Linux >> Belajar Linux >  >> Linux

Cegah ssh agar tidak memecah parameter skrip Shell

Berdasarkan jawaban dari Peter Lyons, tetapi izinkan juga kutipan di dalam argumen:

#!/bin/bash
QUOTE_ARGS=''
for ARG in "[email protected]"
do
  ARG=$(printf "%q" "$ARG")
  QUOTE_ARGS="${QUOTE_ARGS} $ARG"
done

ssh [email protected] "printf ${QUOTE_ARGS}"

Ini berfungsi untuk semua yang telah saya uji sejauh ini, kecuali baris baru:

$ /tmp/wrap_printf "[-%s-]" "hello'\$t\""
[-hello'$t"-]

#!/bin/sh
QUOTE_ARGS=''
for ARG in "[email protected]"
do
  QUOTE_ARGS="${QUOTE_ARGS} '${ARG}'"
done
ssh [email protected] "${QUOTE_ARGS}"

Ini berfungsi untuk spasi. Tidak berfungsi jika argumen memiliki kutipan tunggal tersemat.


Mengutip dengan benar cukup sulit dan melakukannya di bash (secara umum dan kuat) hampir tidak mungkin.

Gunakan Perl:

#!/usr/bin/perl
use Net::OpenSSH;
my $ssh = Net::OpenSSH->new('[email protected]');
$ssh->system('printf', @ARGV);

Linux
  1. Ssh – Skrip Shell Untuk Masuk Ke Server Ssh?

  2. Perilaku Tak Terduga Dari Skrip Shell?

  3. Shell Script Wrapper Untuk Mencegah Menjalankan Perintah Tanpa Argumen?

  1. Cegah Tmux Memulai Di Ssh?

  2. Dari Mana Skrip Shell Dijalankan?

  3. Bagaimana cara ftp dan Mengunduh file dari Skrip Shell UNIX?

  1. Menggunakan perintah passwd dari dalam skrip shell

  2. Apa yang dimaksud dengan [email dilindungi] dalam skrip shell?

  3. Cara memeriksa apakah smtp berfungsi dari commandline (Linux)