GNU/Linux >> Tutoriales Linux >  >> Linux

Evite que ssh rompa los parámetros del script de shell

Basado en la respuesta de Peter Lyons, pero también permite citas dentro de los argumentos:

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

Esto funciona para todo lo que he probado hasta ahora, excepto las nuevas líneas:

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

Esto funciona para los espacios. No funciona si el argumento tiene una comilla simple incrustada.


Citar correctamente es bastante difícil y hacerlo en bash (de una manera general y robusta) casi imposible.

Usar Perl:

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

Linux
  1. ¿Cómo detectar si el Shell está controlado desde Ssh?

  2. ¿Comportamiento inesperado de un script de Shell?

  3. ¿Evitar que Tmux se inicie en Ssh?

  4. ¿Desde dónde se ejecuta un script de Shell?

  5. Cómo ejecutar scripts de Python desde shell

Cómo evitar que se agote el tiempo de espera de SSH

Ssh:¿script de shell para iniciar sesión en un servidor Ssh?

Shell Script Wrapper para evitar la ejecución de comandos sin argumentos?

¿Evitar que Signint llegue a los procesos secundarios?

Usando el comando passwd desde dentro de un script de shell

Evite que SSH anuncie su número de versión