Como transmitir com segurança uma senha por SSH para um comando remoto usar

3

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:

  1. O Unix ps parece não revelar a senha
  2. O
  3. 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.

    
por YoYo 29.05.2015 / 01:24

1 resposta

3

É legível por remote_user e root . Nenhum outro, a menos que remote_command esteja escrevendo para um arquivo globalmente legível ou algo assim.

Você pode inspecionar o ambiente de um processo no sistema de arquivos /proc em /proc/$pid/environ . Você precisa ser o mesmo usuário que o euid de $pid ou você precisa ser root , pois as permissões desse arquivo parecem ser padrão para -r-- --- --- .

Além de usar o ambiente, você também pode passar a senha via stdin canalizando para ssh . Se você canalizar para o ssh, somente o root e o programa alvo (e seus filhos) serão capazes de acessá-lo até onde eu saiba (assumindo $(cat /proc/sys/kernel/yama/ptrace_scope) == 1 ).

    
por 29.05.2015 / 02:33