No servidor local, eu tenho um programa que armazena a senha na variável de ambiente predefinida ( SPECIAL_PASSWORD
).
No servidor remoto eu tenho um programa que lê e usa uma senha de uma variável de ambiente predefinida ( SPECIAL_PASSWORD
).
Eu quero executar o programa no servidor remoto e fornecer a senha já definida no meu ambiente local.
Minha tentativa é a seguinte:
local_command # produces the SPECIAL_PASSWORD Env Var
ssh -l remote_user remote_server <<EOSSH
export SPECIAL_PASSWORD=${SPECIAL_PASSWORD} # Transfer Env Var
remote_command # consumes SPECIAL_PASSWORD Env Var
EOSSH
Também parece funcionar como pretendido:
- O Unix
ps
parece não revelar a senha
O - acesso à senha está disponível apenas para os processos atuais ou seus processos filhos.
Mas é realmente seguro fazê-lo ... a qualquer momento a senha pode ser lida? Existe uma alternativa melhor?
Eu poderia alterar os sshd_config
( AcceptEnv
) e ssh_config
( SendEnv
) para permitir transmitir um subconjunto de variáveis de ambiente sem o truque acima. No entanto, os sistemas são rigidamente controlados e o sshd_config requer intervenção do administrador. No meu caso, não parece ser possível alterar o sshd_config
.
UPDATE
Estou usando uma solução diferente oferecida pelos dados de tubulação no comando ssh remoto que deve ser executado. Observe que essa sintaxe não funciona mais em combinação com documentos AQUI.
sendEnv() {
echo "var1=${var1}"
echo "var2=${var2}"
...
}
sendEnv | ssh -l remote_user remote_server "receiving_command".
No meu caso, o receiving_command
é um programa java que lê as variáveis de ambiente de System.in
.
Funciona como um encanto.