GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verhindern Sie, dass ssh Shell-Skriptparameter auflöst

Basierend auf der Antwort von Peter Lyons, aber auch Anführungszeichen innerhalb von Argumenten zulassen:

#!/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}"

Dies funktioniert für alles, was ich bisher getestet habe, außer für Zeilenumbrüche:

$ /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}"

Dies funktioniert für Leerzeichen. Es funktioniert nicht, wenn das Argument ein eingebettetes einfaches Anführungszeichen enthält.


Das richtige Zitieren ist ziemlich schwierig und es in Bash (auf allgemeine und robuste Weise) fast unmöglich.

Verwenden Sie Perl:

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

Linux
  1. Unerwartetes Verhalten eines Shell-Skripts?

  2. Verhindern, dass Tmux auf Ssh startet?

  3. Wo wird ein Shell-Skript ausgeführt?

  4. So führen Sie Python-Skripte von der Shell aus

  5. Wie kann ich Dateien aus einem UNIX-Shell-Skript per FTP übertragen und herunterladen?

So verhindern Sie ein Timeout von SSH

Wie erkennt man, ob die Shell von ssh aus gesteuert wird?

Shell-Script-Wrapper, um das Ausführen von Befehlen ohne Argumente zu verhindern?

Verhindern, dass Sigint untergeordnete Prozesse erreicht?

Verwenden des passwd-Befehls innerhalb eines Shell-Skripts

Verhindern Sie, dass SSH seine Versionsnummer ankündigt