Por que o sudo -S não funciona para o comando 'mysql'?

1

Eu geralmente executo sudo mysql database < database.dump e digito a senha no prompt.

Para automatizar isso, tentei executar o echo 'password' | sudo -S mysql database < database.dump , mas ele não está reconhecendo minha senha.

Eu posso sudo -S outros comandos normalmente. Qual pode ser o problema?

    
por ftkg 25.10.2013 / 20:41

2 respostas

4

Se você precisar fazer algo assim como root, faça isso corretamente.

  • Crie um novo script em /usr/local/bin/ like /usr/local/bin/my_mysql_task . Ele precisará ser de propriedade de root e chmod +x ed. O importante aqui é que ninguém além do root pode editá-lo.
  • Em seguida, permita que seu usuário execute esse script como root sem uma senha executando sudo visudo e adicionando algo como o seguinte:

    username   ALL=NOPASSWD: /usr/local/bin/my_mysql_task
    

Agora, você não está apenas canalizando a senha da sua conta para todos os lugares (de uma forma que seria mostrada em ps para a maioria dos outros usuários), mas também não está resolvendo seu problema principal.

Nunca incorpore senhas. Não é necessário.

    
por Oli 25.10.2013 / 21:22
1

O problema ocorre porque você usa redirecionamento de pipe e de entrada no mesmo comando e, neste caso, sudo tenta ler sua senha do arquivo database.dump . O caminho certo seria:

mysql_cmd="mysql database < database.dump"
echo 'password' | sudo -S $mysql_cmd

ou:

alias mysql_cmd="mysql database < database.dump"
echo 'password' | sudo -S mysql_cmd

ou, como Oli apontado em este comentário :

echo "password" | sudo -S sh -c "mysql database < database.dump"
    
por Radu Rădeanu 25.10.2013 / 20:52