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.
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:
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,
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.
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.
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:
Respostas:
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
-t
opção:A opção equivalente (para
-o
ou 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 .fonte
RequestTTY
emman 5 ssh_config
.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
ssh
ou digitar cada Tempo.Especificamente, você pode adicionar uma linha na seção [client] do arquivo
.my.cnf
no seu diretório pessoal: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,
Então você pode usar algo como
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
ssh
e precisa inserir a entrada porque, por padrão,ssh
nã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):Como você pode ler neste post do Debian (Jul_11_2008) sobre
sudo
, é um problema antigo que adora repetir: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.
fonte
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:
fonte