Obviamente, você pode definir a variável de ambiente dentro do comando, no entanto, terá que ter cuidado ao citar: lembre-se de que seu shell analisará sua linha de comando local e, em seguida, o shell remoto analisará a string recebe.
Se você deseja que uma variável obtenha o mesmo valor no servidor que possui no cliente, tente a SendEnv
opção:
ssh -o SendEnv = MYVAR server.example.com mycommand
Isso requer suporte do servidor, no entanto. Com o OpenSSH, o nome da variável precisa ser autorizado /etc/sshd_config
.
Se o servidor permitir apenas determinados nomes de variáveis específicos, você poderá contornar isso; por exemplo, uma configuração comum permite LC_*
, e você pode fazer o seguinte:
ssh -o SendEnv = LC_MYVAR server.example.com 'MYVAR = $ LC_MYVAR; desmarque LC_MYVAR; exportar MYVAR; mycommand '
Se even LC_*
não for uma opção, você pode passar informações na TERM
variável de ambiente, que sempre é copiada (no entanto, pode haver um limite de comprimento). Você ainda precisará garantir que o shell remoto não restrinja a TERM
variável para designar um tipo de terminal conhecido. Passe a -t
opção para ssh se você não estiver iniciando um shell interativo remoto.
env TERM = "informações adicionais: $ TERM" ssh -t server.example.com 'MYVAR = $ {TERM%: *}; TERM = $ {TERM ## *:}; exportar MYVAR; mycommand '
Outra possibilidade é definir a variável diretamente no comando:
ssh -t server.example.com 'export MYVAR = "informações extras"; mycommand '
Assim, se passar uma variável local:
ssh -t server.example.com 'export MYVAR =' "'$ LOCALVAR'" '; mycommand '
No entanto, cuidado com os problemas de citação: o valor da variável será interpolado diretamente no snippet do shell executado no lado remoto. O último exemplo acima assume que $LOCALVAR
não contém aspas simples ( '
).