Naturalmente, você pode definir a variável de ambiente dentro do comando, mas você terá que ter cuidado com as citações: lembre-se de que seu shell vai analisar sua linha de comando local, e então o shell remoto vai continuar a string que recebe.
Se você quiser que uma variável obtenha o mesmo valor no servidor que ela tem no cliente, tente a opção SendEnv
:
ssh -o SendEnv=MYVAR server.example.com mycommand
Isso requer suporte do servidor, no entanto. Com o OpenSSH, o nome da variável deve ser autorizado em /etc/sshd_config
.
Se o servidor permitir apenas determinados nomes de variáveis específicas, você poderá contornar isso; por exemplo, uma configuração comum permite LC_*
through e você pode fazer o seguinte:
ssh -o SendEnv=LC_MYVAR server.example.com 'MYVAR=$LC_MYVAR; unset LC_MYVAR; export MYVAR; mycommand'
Se mesmo LC_*
não for uma opção, você poderá passar informações na variável de ambiente TERM
, que é sempre copiada (no entanto, pode haver um limite de comprimento). Você ainda terá que se certificar de que o shell remoto não restringe a variável TERM
para designar um tipo de terminal conhecido. Passe a opção -t
para ssh se você não estiver iniciando um shell interativo remoto.
env TERM="extra information:$TERM" ssh -t server.example.com 'MYVAR=${TERM%:*}; TERM=${TERM##*:}; export MYVAR; mycommand'
Outra possibilidade é definir a variável diretamente no comando:
ssh -t server.example.com 'export MYVAR="extra information"; mycommand'
Assim, se passar uma variável local:
ssh -t server.example.com 'export MYVAR='"'$LOCALVAR'"'; mycommand'
No entanto, tenha cuidado com as questões de cotação: o valor da variável será interpolado diretamente no fragmento de shell executado no lado remoto. O último exemplo acima assume que $LOCALVAR
não contém nenhuma aspas simples ( '
).