unix - 以另一个用户身份运行命令

时间:2012-06-19 16:38:29

标签: unix sudo

我是Unix的新手。我正在尝试以另一个用户身份运行shell脚本和命令。

例如: 我以user1身份登录,并希望以user2身份执行脚本。我不想要密码提示,我希望它能自动输入。我知道公钥认证,但我试图找到是否有类似的东西:

sudo -u user2 script.sh

我正在尝试cron这个,所以我不想要密码提示。我希望它在sudo命令本身中处理。

请帮助

2 个答案:

答案 0 :(得分:4)

您可以将NOPASSWD选项添加到/etc/sudoers文件。 但出于安全考虑,可能对你不利。

user    user2 = NOPASSWD: /usr/local/bin/script.sh

您拥有的另一个选项:使用sudo,但不是直接从某个脚本运行,而是使用pexpectexpect,这将为您输入密码。从安全角度来看,这也可能并不理想,因为您需要在脚本中保存密码。

使用expect,您可以执行以下操作:

#!/usr/bin/expect
set password "megapassword"
spawn /bin/sudo -u user1 /usr/local/bin/script.sh
expect "password for user:"
send "$password\r"
expect eof

不要忘记在该文件上设置500个权限。

使用pexpect(这是一个python模块),它将如下所示:

import pexpect
password = "megapassword"
p = pexpect.spawn("sudo -u user1 /usr/local/bin/script.sh")
i = p.expect([".ssword:*", pexpect.EOF])
p.sendline(password)

如果您在cron中运行该命令并可以将命令添加到user1的crontab,您也可以这样做。这可能是最好的解决方案。

user1$ crontab -e

答案 1 :(得分:0)

如Igor所说,在/etc/sudoers中添加NOPASSWD选项,或者首先在 user2 的crontab中安排命令。