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

Aka*_*thi 13 ubuntu shell-script

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

我的命令是这样的

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

但是使用这个命令,我切换到用户,下一个命令在前一个用户上触发。

是否有任何我可以使用 shell 脚本完成此操作

αғs*_*нιη 26

尝试。

sudo -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh' 
Run Code Online (Sandbox Code Playgroud)

男人 sudo

-H

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

-u 用户

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

  • 为什么`... bash -c 'bash file.sh'`?你不能把它写成`... bash file.sh`吗? (5认同)

chl*_*soe 6

有了su user -c "sh /path/command.sh"你可以运行一个命令的用户

我用这个命令测试过:

 echo myPassword | sudo -S su - foobar -c "/usr/bin/watch -n 1 cat /etc/resolv.conf"
Run Code Online (Sandbox Code Playgroud)

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

所以我认为你的命令应该是这样的:

echo myPassword | sudo -S su - hduser -c "bash /usr/local/hadoop/sbin/start-dfs.sh"
Run Code Online (Sandbox Code Playgroud)


jos*_*isq 5

这里有一个较短的版本这里是 \xce\xb1\xd2\x93s\xd0\xbd\xce\xb9\xce\xb7\ 的答案

\n\n
sudo -Hu user command\n# example: sudo -Hu root fish\n
Run Code Online (Sandbox Code Playgroud)\n