O SSH torna todas as senhas digitadas visíveis quando o comando é fornecido como um argumento para o comando SSH

45

Se eu executar isso:

ssh user@server 'mysql -u user -p'

Quando ele me pede a senha do MySQL e eu começo a digitar, a senha fica visível na tela. Como posso evitar isso? Se eu fizer login através de ssh e, em seguida, executar o comando MySQL, tudo funcionará bem.

    
por user110971 25.10.2016 / 11:48

3 respostas

98

Se você fornecer um comando remoto para executar, o SSH não aloca um tty, portanto, o comando remoto não pode desativar o eco. Você pode forçar o SSH a fornecer um tty usando a opção -t :

ssh -t user@server 'mysql -u user -p'

A opção equivalente (para -o ou para arquivo de configuração) é RequestTTY . Eu teria cautela contra usá-lo na configuração porque ele pode ter efeitos indesejados para comandos não interativos .

    
por 25.10.2016 / 12:18
28

Armazenando a senha em um arquivo de opções protegido

Se você puder confiar [*] na segurança do computador remoto, poderá armazená-la em um arquivo de opções devidamente protegido, conforme sugerido nas Diretrizes para usuários finais de segurança por senha capítulo do manual [ 1 ] , sem a necessidade de se comunicar através de ssh ou digitar cada vez.

Especificamente, você pode adicionar uma linha na seção [cliente] do arquivo .my.cnf em seu diretório pessoal.

[client]
password=your_pass

É claro que você precisa impedir que esse arquivo seja acessível a qualquer pessoa, exceto você mesmo, configurando o modo de acesso a arquivos para 400 ou 600 com, por exemplo,

chmod 600 ~/.my.cnf

Então você pode usar algo como

ssh user@server 'mysql -u user110971 --defaults-file=/home/user110971/mysql-opts'

user110971 é o nome de usuário da sua conta.

Forçando o ssh a alocar um pseudo tty ( ssh -t )

Esse problema ocorre toda vez que você envia um comando através de ssh e você precisa inserir a entrada porque, por padrão, ssh não alocará uma pseudo-tty.

Você pode forçar a alocação tty com a opção -t (mais do que uma, se necessário):

-t
Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

Como você pode ler nesta postagem do debian (jul_11_2008) [ 2 ] sobre o sudo é um problema antigo que adora recorrer:

ssh user@server "sudo ls"
password: password

And password is shown you

  
     

A solução é forçar o ssh a alocar uma pseudo-tty, com o sinalizador -t:

ssh -t user@server sudo ls

Nota:

[*] Se você puder confiar para deixar a senha em um arquivo acessível somente por você e root no cliente working .
Se é possível reiniciar o computador remoto alterando o sistema operacional ou para remover o disco rígido que não é um computador para ser considerado completamente seguro ... mas nesse caso, mesmo o banco de dados inteiro não terá certeza ...

    
por 25.10.2016 / 12:45
2

A opção de montagem "hidepid" para proc fs também é valiosa. Isso torna suas linhas de comando invisíveis na lista de processos para outros usuários. exemplo fstab:

proc /proc proc hidepid=1 0 0
    
por 26.10.2016 / 18:39