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

Kan*_* Lg 5 unix sudo

我是Unix的新手.我试图以另一个用户身份运行shell脚本和命令.

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

sudo -u user2 script.sh
Run Code Online (Sandbox Code Playgroud)

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

请帮忙

Igo*_*bin 4

您可以将 NOPASSWD 选项添加到/etc/sudoers文件中。但出于安全原因,这可能对您不利。

user    user2 = NOPASSWD: /usr/local/bin/script.sh
Run Code Online (Sandbox Code Playgroud)

您还有另一个选择:使用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
Run Code Online (Sandbox Code Playgroud)

不要忘记对该文件设置 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)
Run Code Online (Sandbox Code Playgroud)

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

user1$ crontab -e
Run Code Online (Sandbox Code Playgroud)