如何将字符串输入重定向到sudo?

时间:2012-05-31 04:44:03

标签: linux bash shell

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

的内容
$my_psswd >> sudo some_command parameter1 parameter2

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

我尝试过像

这样的事情
$my_psswd >1 sudo something
echo $my_psswd | sudo something

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

4 个答案:

答案 0 :(得分:6)

我建议不要这样做。您将以纯文本格式存储密码,这意味着其他人可以访问该密码。或者它将在流程列表中可见,也可供其他用户使用。

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

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

答案 1 :(得分:5)

你需要-S开关sudo命令:

-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

答案 2 :(得分:3)

尝试echo $ PW | sudo -S cmd

它可能适合你。

答案 3 :(得分:3)

你不要以这种方式使用sudo,使用visudo指定允许哪些命令用户,然后你不需要担心密码。