Ejecutar script remoto con valor de parámetro local

Ejecutar script remoto con valor de parámetro local

¿Cómo puedo automatizar esta tarea?

1) Estás en A. 2) Entras a B. 3) Ejecutas un script en B, que necesita un parámetro conocido en A.

Primero, pensé que tal vez podría enviar el valor cuando abrí la conexión con ssh. Luego, probablemente más simple, entre 1) y 2), coloque el script completo en la misma ubicación en B (reemplazando el anterior). Pero aún así, ¿cómo puedoejecutarel guión en B? (Es decir, cómo automatizar ese último paso. Por supuesto, podría ejecutarlo manualmente después de ssh).

Otra idea, tal vez descartar ssh por completo: tengo una página web en B, entonces, ¿podría invocarse el script de alguna manera a través de una interfaz web "oculta"?

¿O lo harías de una manera completamente diferente?

Respuesta1

myparameter=foobar
ssh user@server "myscript $myparameter"

Esto se ejecutará myscript foobaren el servidor.

Respuesta2

(Este es un seguimiento demi comentario sobre la respuesta aceptada.)

Tenga en cuenta que si $myparametercontiene espacios, se dividirá en el lado del servidor. printf de Bash tiene un %qformato que puedes usar. Ejemplo:

$ myparameter='hello; rm somefile'
$ ssh user@server "echo $myparameter"
hello
rm: cannot remove `somefile': No such file or directory

$ ssh user@server "echo $(printf '%q' "$myparameter")"
hello; rm somefile

Respuesta3

Si es seguro asumir que eso $myparameterseránocontener comillas simples (de lo contrario, consulteaquío use la printf '%q' ...solución de janmoesen), puede simplemente poner comillas simples $myparameterpara evitar el problema de división en el espacio en el lado del servidor.

myparameter="foo \" bar"
#myparameter="foo \" ' bar"

ssh localhost "set -xv; printf '%s\n' myscript '${myparameter}'"
ssh localhost "set -xv; echo $(set -xv; printf '%q' "$myparameter")"

Respuesta4

Dudo en responder una pregunta de 10 años, especialmente cuando ya hay una respuesta perfectamente buena, pero tenga en cuenta que el guión "remoto" en realidad nonecesidadestar en B en absoluto. Esto (a) hace que la sustitución de parámetros sea trivial y (b) elimina la complicación de si es una buena idea tener el script en el sistema remoto (problemas de seguridad/lo que sea).

La alternativa es simplemente ejecutar ssh conaquí doctoraporte. En este caso, la sustitución de parámetros se realiza.en la zona, y no en el sistema remoto (siempre que no incluya el delimitador de documento, en este caso EOF):

portnum=1234
[email protected]
mydir=/var/www/bar
param=foo

ssh -p$portnum $target /bin/bash <<EOF
  set -e;
  cd $mydir;
  # create remote 3-character file '/var/www/bar/myfile' containing 'foo'
  echo -n $param > myfile
EOF

información relacionada