为什么 sudo -S 对‘mysql’命令不起作用?

为什么 sudo -S 对‘mysql’命令不起作用?

我通常会sudo mysql database < database.dump在提示时运行并输入密码。

为了实现自动化,我尝试执行echo 'password' | sudo -S mysql database < database.dump但它无法识别我的密码。

我可以sudo -S正常执行其他命令。可能是什么问题?

答案1

你不可以

如果您需要以 root 身份执行此类操作,请正确执行。

  • /usr/local/bin/在类似中创建一个新脚本/usr/local/bin/my_mysql_task。它需要由 root 和chmod +xed 拥有。这里重要的是,除了 root 之外,没有人可以编辑它。
  • 然后让您的用户以 root 身份运行该脚本而无需密码,方法是运行sudo visudo并添加以下内容:

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

现在,您不仅不会到处泄露您的帐户密码(ps大多数其他用户都会看到),而且根本不会泄露,从而解决了您的核心问题。

永远不要嵌入密码。这是没有必要的。

答案2

出现此问题的原因是您在同一个命令中使用了管道和输入重定向,并且在这种情况下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"

相关内容