
¿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 foobar
en el servidor.
Respuesta2
(Este es un seguimiento demi comentario sobre la respuesta aceptada.)
Tenga en cuenta que si $myparameter
contiene espacios, se dividirá en el lado del servidor. printf de Bash tiene un %q
formato 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 $myparameter
seránocontener comillas simples (de lo contrario, consulteaquío use la printf '%q' ...
solución de janmoesen), puede simplemente poner comillas simples $myparameter
para 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