【问题标题】:unix - run a command as another user [closed]unix - 以另一个用户身份运行命令[关闭]
【发布时间】:2012-06-19 16:38:28
【问题描述】:

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

例如: 我以 user1 身份登录并想以 user2 身份执行脚本。我不想要密码提示,我希望它自动输入。我知道公钥身份验证,但我正在尝试查找是否有类似的内容:

sudo -u user2 script.sh

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

请帮忙

【问题讨论】:

  • 我永远不会理解 Stack Overflow 上这个“离题”的东西 - 我经常觉得它被不了解问题中的技术或不了解问题本身的人使用.

标签: unix sudo


【解决方案1】:

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

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

【讨论】:

  • 是的,你是对的,我不想完全禁用密码,但想在 sudo 运行时输入密码。有办法吗? :(
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多