Como mascarar senhas no comando 'watch'?

3

Estou usando watch para monitorar o progresso de um escravo de replicação do MySQL. Do jeito que eu configurei agora, a senha aparece no cabeçalho da saída watch . Não estou muito preocupado com o fato de alguém roubar a senha, mas, a princípio, eu preferiria não mostrar uma senha nua para qualquer um que por acaso andasse por cima do meu ombro.

A linha de comando que estou usando no momento com watch é:

watch -n1 -d mysql -pmypass -e "'show slave status\G'"

Devo apenas enterrar o comando mysql em um pequeno script de shell?

    
por amacleod 21.08.2014 / 23:22

3 respostas

6

Uma opção melhor do que fornecer a senha na linha de comando é criar um arquivo ~/.my.cnf com as credenciais:

[client]
password=something

Dessa forma, eles também são protegidos contra alguém que esteja vendo a saída ps ou seu histórico de shell.

Dito isso, você pode desativar o título watch inteiramente com a -t ou --no-title option , que irá:

Turn off the header showing the interval, command, and current time at the top of the display, as well as the following blank line.

Você perde um pouco mais de informação do que queria, mas não é muito importante. Caso contrário, um script de shell também funciona, como você sugeriu.

    
por 21.08.2014 / 23:29
3

Ele não só aparecerá na sua tela, mas também na ps output, no seu ~/.bash_history (embora esse só possa ser lido para você e os administradores) e possivelmente em alguns registros de auditoria ou de desempenho. / p>

Você não deve passar senhas como argumentos para comandos. Argumentos para comandos devem ser considerados de conhecimento público.

Para o mysql, use ~/.my.cnf como Michael mostrou ou em outro arquivo (somente legível) passado como --defaults-extra-file=the-file

    
por 21.08.2014 / 23:32
2

Você pode digitar a senha ao executá-la? Você pode lê-lo em um script bash sem torná-lo visível no terminal, salvando no histórico, etc:

#!/bin/bash

if ! IFS= read -rs -p "Enter password: " password < /dev/tty 2> /dev/tty
then
  echo "Password entry failed"
  exit 1
fi

somecommand -user me -password $password

Olhando para a outra resposta, esta é vulnerável ao problema ps , já que haverá um processo para somecommand

    
por 22.08.2014 / 04:41