Linux立即切换用户并执行命令

Linux立即切换用户并执行命令

我有一个场景,我必须切换到不同的用户,之后我需要执行一些 Linux 命令。

我的命令是这样的

( echo myPassword | sudo -S su hduser ) && bash /usr/local/hadoop/sbin/start-dfs.sh

但使用此命令,我切换到该用户,并且下一个命令在前一个用户上触发。

有没有我可以使用 shell 脚本来完成这个任务

答案1

尝试。

sudo -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh' 

曼须藤

-H

-H (HOME) 选项请求安全策略将 HOME 环境变量设置为密码数据库指定的目标用户(默认为 root)的主目录。根据策略,这可能是默认行为。

-u 用户

-u(用户)选项使 sudo 以 root 以外的用户身份运行指定的命令。要指定 uid 而不是用户名,请使用#uid。当作为 uid 运行命令时,许多 shell 要求使用反斜杠 ('\') 对 '#' 进行转义。安全策略可能会将 uid 限制为密码数据库中列出的 uid。只要未设置 targetpw 选项,sudoers 策略就允许不在密码数据库中的 uid。其他安全策略可能不支持这一点。

答案2

su user -c "sh /path/command.sh"可以运行命令用户

我用这个命令进行了测试:

 echo myPassword | sudo -S su - foobar -c "/usr/bin/watch -n 1 cat /etc/resolv.conf"

之后,它watch -n作为 foobar 运行。

所以我认为你的命令应该像这样工作:

echo myPassword | sudo -S su - hduser -c "bash /usr/local/hadoop/sbin/start-dfs.sh"

答案3

这里有一个较短的版本αГsнιn 的回答

sudo -Hu user command
# example: sudo -Hu root fish

答案4

你可以试试这个:

pkexec - 以另一个用户身份执行命令

pkexec [--user 用户名] 程序 [参数...]

相关内容