Ejecución remota de comandos SSH en script

Ejecución remota de comandos SSH en script

En mi script hago algo como esto:

command="some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;"
ssh_command="ssh root@$ip '$command'"

echo $ssh_command
exec $ssh_command

El eco da un resultado como este:

ssh [email protected] 'some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;'

Después de lo "ejecutivo", obtengo el resultado:

bash: some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;: No such file or directory

Sin embargo, cuando copie el comando de la salida de eco y ejecútelo directamente desde la terminal, funciona de maravilla. ¿Alguna idea de por qué?

Respuesta1

execreemplaza el shell con un programa, invocándolo con los argumentos proporcionados. El shell ve 2 tokens: "exec" y "some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;". El segundo argumento se interpreta como una ruta a un programa a ejecutar, incluidos todos los espacios y puntos y coma. Sólo un shell sabe dividir argumentos en espacios en blanco y separar comandos con punto y coma. Por lo tanto, debes reemplazar execcon una llamada a un shell, como sh -c "$ssh_command".

Respuesta2

Nohuppuede serle útil.

Intente integrar algo como esto desde el siguiente enlace.

ssh -n -f usuario@host "sh-c'cd/dondequiera; nohup ./lo que sea > /dev/null 2>&1 &'"

https://stackoverflow.com/q/29142/1666510

información relacionada