Почему sudo -S не работает для команды mysql?

Обычно я запускаю sudo mysql database < database.dump и набираю пароль в командной строке.

Чтобы автоматизировать это, я попытался выполнить echo 'password' | sudo -S mysql database < database.dump, но он не распознает мой пароль.

Я могу sudo -S другие команды нормально. В чем может быть проблема?

1
задан 25 October 2013 в 22:41

2 ответа

No you do not

Если вам нужно сделать что-то вроде этого как root, пожалуйста, сделайте это правильно.

  • Создайте новый скрипт в /usr/local/bin/, как /usr/local/bin/my_mysql_task. Он должен принадлежать root и chmod +x ed. Здесь важно то, что никто, кроме root, не может редактировать его.
  • Затем пусть ваш пользователь запускает этот скрипт от имени root без пароля, запустив sudo visudo и добавив что-то вроде следующего:

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

Теперь вы не только не распространять пароль к своей учетной записи везде (таким образом, как это показано в ps большинству других пользователей), но вы не подключаете его вообще, решая, таким образом, вашу основную проблему.

Никогда не вставляйте пароли. Это не обязательно.

0
ответ дан 25 October 2013 в 22:41

Проблема возникает из-за того, что вы используете перенаправление каналов и ввода в одной и той же команде, и в этом случае sudo пытается прочитать ваш пароль из файла database.dump. Правильный путь будет:

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

или:

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

или, как Оли указал в этот комментарий :

echo "password" | sudo -S sh -c "mysql database < database.dump"
0
ответ дан 25 October 2013 в 22:41

Другие вопросы по тегам:

Похожие вопросы: