1

我正在编写一个需要 root 访问权限的 bash 脚本,所以我需要做的是编写类似

$my_psswd >> sudo some_command parameter1 parameter2

使过程自动化。我不担心这是否会打开安全漏洞。这或多或少是我能想到的一个例子。但问题是,当我启动 sudo 任何东西时,它会要求用户输入,我不确定如何自动化或作为变量提供。

我试过像

$my_psswd >1 sudo something
echo $my_psswd | sudo something

但这都不是我想要的。这也必须是一个bash脚本,我不能使用像expect这样的程序。谢谢。

4

4 回答 4

6

sudo 命令需要 -S 开关:

-S The -S (stdin) option causes sudo to read the password from the standard input instead of the terminal device. The password must be followed by a newline character

于 2012-05-31T04:50:55.647 回答
6

我建议完全不要这样做。您将以纯文本形式存储您的密码,这意味着其他人可以访问它。或者它将在进程列表中可见,再次可供其他用户使用。

有几种方法可以防止这种情况:

  1. 使用 sudo 运行整个脚本。不要在脚本本身中使用 sudo,而是以提升的权限运行所有内容。不利的一面是,您可能正在执行不需要它但没有更多背景的提升权限的事情,这是不可能的。
  2. 最好将您的帐户配置为通过 sudo 执行这些特定命令,而无需提供密码。这样,您就可以只执行需要它的命令并提升权限,而不会出现提供密码的问题。
  3. 一种解决方法可能是sudo -l在调用脚本之前运行。这样 sudo 将有一个活动会话并且不会提示输入密码。这只是一种解决方法,如果其中一个命令的执行时间比为 sudo 配置的宽限时间长,它就会失败。但在小脚本中,这可能是一个简单的修复。
于 2012-05-31T06:55:39.977 回答
3

尝试回声 $PW | 须藤 -S cmd

它可能对你有用。

于 2012-05-31T04:50:08.783 回答
3

您不应该以这种方式使用 sudo ,使用 visudo 指定允许哪些用户使用哪些命令,那么您不必担心密码。

于 2012-05-31T05:48:20.990 回答