Redirecionando uma saída de um subshell para um processo

2

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 ?

    
por Ondra Žižka 10.07.2018 / 03:06

2 respostas

2

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.

    
por 10.07.2018 / 03:32
0

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

Alternativas

método de redirecionamento

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

Referências

por 10.07.2018 / 04:54