myparameter=foobar
ssh user@server "myscript $myparameter"
Isso executará myscript foobar
no servidor.
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?
(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
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")"