Você deseja uma substituição de processo como ssh ... < <(...)
. ssh ... < $(my_command)
é uma substituição de comando cria um redirecionamento com cada word do resultado de my_command
como alvo de redirecionamento.
Estou tentando executar um script no SSH e passar alguns parâmetros para esse script. Eu tentei o seguinte que não funcionou - o valor não é passado:
$ LC_FOO=x ssh -o SendEnv=LC_FOO $HOST < myLongScript.sh
Os hosts de destino são, às vezes, muito restritos e recriados regularmente, portanto, mudar as configurações de SSH neles é inútil.
Então, estou tentando recorrer a um truque e passar o valor dentro do próprio script. Em outras palavras, quero anexar as variáveis ao script.
Eu também tentei essas outras abordagens:
# doesn't work - 'ambiguous redirect'
$ ssh ... < $(...)
# doesn't work - 'LC_FOO=x: command not found'
$ $(echo "FOO=x"; cat myLongScript.sh) | ssh ...
Como posso prefixar a linha na entrada de ssh
?
Você deseja uma substituição de processo como ssh ... < <(...)
. ssh ... < $(my_command)
é uma substituição de comando cria um redirecionamento com cada word do resultado de my_command
como alvo de redirecionamento.
O primeiro exemplo funcionará se você habilitar a variável LC_FOO
para que esteja na lista AcceptEnv
no arquivo /etc/ssh/sshd_config
do lado do servidor.
$ grep AcceptEnv /etc/ssh/sshd_config
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
AcceptEnv LC_FOO
Agora funciona:
$ LC_FOO=x ssh -o SendEnv=LC_FOO [email protected] 'printenv LC_FOO'
x
Mostrei isso em outra lista de perguntas e respostas com o título A: Como posso executar um script local na máquina remota e incluir argumentos? , e para o seu exemplo, eu recomendo fazê-lo assim:
$ ssh serverA "bash -s" -- < ./ex.bash "arg1" "arg2"
método heredoc
Você também pode fazer um estilo heredoc, que destaquei neste outro U & QQ & A intitulado: Visualizar valor remoto de $ PATH dentro do script de shell :
[root@skinner ~]# ssh mulder 'bash -s <<EOL
> echo $HOSTNAME
> hostname
> EOL'
mulder.bubba.net
mulder.bubba.net
Tags ssh bash linux scripting shell-script