Execute script remoto com valor de parâmetro local

8

Como posso automatizar essa tarefa?

1) Você está no A. 2) Você 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 abri a conexão com o ssh. Então, provavelmente mais simples, entre 1) e 2), scp o script inteiro para o mesmo local em B (substituindo o antigo). Mas ainda assim, como eu executo o script em B? (Isto é, como automatizar o último passo. Claro, eu poderia executá-lo manualmente após o ssh.)

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

Ou você faria isso de uma maneira totalmente diferente?

    
por Emanuel Berg 16.07.2012 / 00:55

3 respostas

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

Isso executará myscript foobar no servidor.

    
por 16.07.2012 / 01:06
6

(Este é um follow-up para meu comentário sobre a resposta aceita .)

Observe que, se $myparameter contiver espaços, ele será dividido no lado do servidor. O printf de Bash tem um formato %q que você poderia 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
    
por 16.07.2012 / 15:19
1

Se for seguro assumir que $myparameter não conterá aspas simples (caso contrário, consulte aqui ou use a solução printf '%q' ... de janmoesen), você pode simplesmente colocar aspas simples em torno de $myparameter para 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")"
    
por 13.02.2014 / 11:23