我有一个场景,我必须切换到不同的用户,之后我需要执行一些 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 用户名] 程序 [参数...]