Como evito ecoar senha (dois avisos simultâneos)?

2

O comando do qual estou falando é o seguinte:

mysqldump -u root -p DB | mysql -u root -p DB2

E aqui está a saída:

Enter password: Enter password:
MYPASS

Tanto quanto eu posso dizer, depois que eu digito a primeira senha supostamente mysqldump ativa o eco, e como resultado a segunda senha é ecoada. Agora que penso nisso, como eles conseguem ler a senha?

    
por x-yuri 06.02.2014 / 07:43

1 resposta

1

Eu posso responder à pergunta "como eles conseguem ler a senha?"

Existe um arquivo de dispositivo chamado /dev/tty . Os kernels Linux (e mais modernos) organizam para que /dev/tty seja diferente para cada processo que possui um TTY de controle. Isso é tudo dos processos interativos, você teria que sair do seu caminho para escrever um programa que não tem um controle TTY. A coluna "TTY" de ps -l -p $$ mostrará qual é o TTY do seu shell. A coluna ps -el "TTY" mostrará o controle do TTY de todos os processos.

Você pode pensar em /dev/tty como uma maneira de obter o que normalmente seria stdin, mas do teclado associado ao TTY de controle. Você pode tentar isso com o comando cat < /dev/tty > spork em uma janela do Xterm. Tudo o que você digitar, até o controle de encerramento-D, acabará no arquivo "spork".

Muitos clientes de FTP e SSH usam /dev/tty para entrada de senha, para evitar que uma senha seja mostrada no ambiente ou em outras fendas. Os clientes interativos podem fazer open("/dev/tty", O_RDWR) independentemente do TTY de controle real e obter um descritor de arquivo que, em essência, esteja conectado ao teclado. Várias chamadas do sistema podem ser usadas para desativar o eco. Você pode testar isso usando um Xterm de shell bash e executando stty -echo . Você terá que digitar cego, mas comandos como ls , ps , etc. claramente chegam ao shell e funcionam. Você pode ativar o TTY ecoando novamente via stty echo .

Aparece ( conforme Rahul Patil acima ), que você pode definir um senha em um arquivo, .my.cnf . Esse arquivo pode incluir estas linhas:

[client]
password="my_password"

ou talvez algo como:

[mysql]
password="my_password"
user=root

O arquivo .my.cnf parece ser extremamente flexível na especificação de parâmetros e valores comuns a muitos clientes do MySQL.

    
por 06.02.2014 / 15:08