Execute script remoto com valor de parâmetro local

Execute script remoto com valor de parâmetro local

Como posso automatizar esta tarefa?

1) Você está em A. 2) Você faz ssh em B. 3) Você executa um script em B, que precisa de um parâmetro conhecido em A.

Primeiro, pensei que talvez pudesse enviar o valor quando abrisse a conexão com ssh. Então, provavelmente mais simples, entre 1) e 2), coloque todo o script no mesmo local em B (substituindo o antigo). Mas ainda assim, como faço paraexecutaro roteiro em B? (Ou seja, como automatizar a última etapa. Claro, eu poderia executá-lo manualmente após o ssh.)

Outro pensamento, talvez descartar completamente o ssh - eu tenho uma página da web em B, então o script poderia de alguma forma ser invocado através de uma interface da web "sob o capô"?

Ou você faria isso de uma maneira totalmente diferente?

Responder1

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

Isso será executado myscript foobarno servidor.

Responder2

(Este é um acompanhamento parameu comentário sobre a resposta aceita.)

Observe que se $myparametercontiver espaços, será dividido no lado do servidor. O printf do Bash tem um %qformato que você pode usar. Exemplo:

$ 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

Responder3

Se for seguro assumir que $myparameterissonãoconter aspas simples (caso contrário, consulteaquiou use a printf '%q' ...solução de janmoesen), você pode simplesmente colocar aspas simples $myparameterpara evitar o problema de divisão no espaço no lado do 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")"

Responder4

Hesito em responder a uma pergunta de 10 anos, especialmente quando já existe uma resposta perfeitamente boa, mas observe que o script 'remoto' na verdade não funciona.precisarestar em B. Isso (a) torna a substituição de parâmetros trivial e (b) elimina a complicação de saber se é uma boa ideia ter o script no sistema remoto (problemas de segurança/qualquer coisa).

A alternativa é apenas executar o ssh comaqui doutorentrada. Neste caso, a substituição do parâmetro é feitalocalmente, e não no sistema remoto (desde que você não cite o delimitador doc, neste 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

informação relacionada