O SSH torna visível todas as senhas digitadas quando o comando é fornecido como 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 entrar sshe executar o comando MySQL, tudo funcionará bem.

user110971
fonte
5
você não acha que o título é pouco claro? Você poderia dizer que torna todo o texto, inclusive as senhas, visíveis. E como o ssh deve saber o que você está digitando é uma senha versus outro comando ou dados?
barlop
@ barlop Estou aberto a sugestões.
user110971
@ Barlop bem, funciona quando você executa o comando uma vez que você ssh para o servidor. Estou procurando uma maneira de tornar o comportamento ssh o mesmo quando os comandos são fornecidos como argumento.
user110971
provavelmente não é tão necessário, mas você pode incluir um exemplo de cópia / colagem completa do console, por exemplo, mostrando não apenas o comando ssh, mas a resposta e o prompt do mysql a seguir. Você pode alterar a senha para swisscheese para não colocá-lo no site eu não posso testá-lo neste momento
barlop
@barlop É apenas as mesmas mensagens que você esperaria isto é ssh senha seguida de solicitações de senha do MySQL
user110971

Respostas:

100

Se você fornecer um comando remoto para executar, o SSH não alocará um tty; portanto, o comando remoto não poderá desativar o eco. Você pode forçar o SSH a fornecer um tty usando a -topção:

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

A opção equivalente (para -oou para o arquivo de configuração) é RequestTTY. Eu recomendaria não usá-lo na configuração, pois pode ter efeitos indesejados para comandos não interativos .

Toby Speight
fonte
15
Ou você pode editar ~ / .ssh / config para configurar esse host específico para sempre solicitar um TTY. Veja RequestTTYem man 5 ssh_config.
um CVn
7
@ MichaelKjörling (e Toby): talvez adicione um pouco de aviso de que a adição de "-t" deve ser reservada apenas para uso interativo, pois tem efeitos colaterais. Para uma boa vista sobre alguns desses efeitos colaterais: unix.stackexchange.com/a/122624/27616 (de StephaneChazelas)
Olivier Dulac
Concordo - eu ia sugerir que é uma pena que você não possa adicionar configurações (como essa) de acordo com o comando remoto (e não pelo Host).
Toby Speight
28

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

Se você puder confiar em [*] a segurança do computador remoto, poderá armazenar a senha em um arquivo de opções protegido adequadamente, conforme sugerido no capítulo Diretrizes do usuário final para segurança de senha do manual, sem a necessidade de se comunicar por meio de sshou digitar cada Tempo.

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

[client]
password=your_pass

Obviamente, você deve impedir que esse arquivo seja acessível a qualquer pessoa além de você mesmo, definindo o modo de acesso a arquivos como 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'

onde 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 sshe precisa inserir a entrada porque, por padrão, sshnão aloca uma pseudo-tty.

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

-t

Forçar alocação pseudo-tty. Isso pode ser usado para executar programas arbitrários baseados em tela em uma máquina remota, o que pode ser muito útil, por exemplo, ao implementar serviços de menu. Várias -topções forçam a alocação de tty, mesmo se ssh não tiver tty local.

Como você pode ler neste post do Debian (Jul_11_2008) sobre sudo, é um problema antigo que adora repetir:

ssh user@server "sudo ls"  
password: password  

E a senha é mostrada

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

ssh -t user@server sudo ls

Nota:

[*] Se você pode confiar em deixar a senha em um arquivo acessível apenas por você e raiz no trabalho cliente.
Se for possível reiniciar o computador remoto alterando o SO ou remover o disco rígido, o computador não poderá ser considerado completamente seguro ... mas, nesse caso, o próprio banco de dados não estará seguro.

Hastur
fonte
1
talvez adicione um aviso de que a adição de "-t" deve ser reservada apenas para uso interativo, pois tem efeitos colaterais. Para uma boa vista sobre alguns desses efeitos colaterais: unix.stackexchange.com/a/122624/27616 (de StephaneChazelas)
Olivier Dulac
3

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
bandie
fonte