使用更多用户执行脚本

Posted

技术标签:

【中文标题】使用更多用户执行脚本【英文标题】:Executing scripts using more users 【发布时间】:2011-04-09 02:49:12 【问题描述】:

我正在编写一个调用许多其他脚本的 bash 脚本。 几个脚本必须以 user_1 身份执行,但有几个脚本必须以 user_2 身份执行。 脚本应按严格的顺序调用。我以 user_1 身份启动我的脚本,并多次使用 su 成为 user_2。这些时候 su 需要密码,所以我必须重新输入很多次。 我想避免这种情况,但 su 没有密码参数。 sudo 和 expect 没有安装。

【问题讨论】:

【参考方案1】:

为 user_1 和 user_2 创建一个分叉(使用“&”)。他们应该使用“锁定文件”(信号量)进行通信(类似于客户端-服务器)。例如 user_1 正在做某事,而 user_2 检查是“锁定文件”存在于 while ...sleep 循环

也许这很愚蠢,但你可以使用ssh user@localhost结束键

【讨论】:

这也是我的第一个想法,它肯定是一个很好的解决方案。我觉得太冒险了。当脚本变得更加复杂时,它可能会在将来引起问题。【参考方案2】:

如果你碰巧有 zsh,我想你可以很容易地做到这一点——比如:

#!/bin/zsh
coproc user1_script
su user2
do_stuff
echo "your_turn" >&p
read MY_TURN
do_more_stuff
echo "your_turn" >&p
read MY_TURN
...

user1_script:

#!/bin/zsh
read MY_TURN
do_stuff
echo your_turn
read MY_TURN
do_more_stuff
...

如果你卡住了,并且有 zsh,无论如何都值得一试。

【讨论】:

Bash 4 和 ksh 也有协同进程。【参考方案3】:

您可以以 root 身份运行。听起来有风险?如果您小心并在每个命令之前使用 su 并添加用户名,则不会:

su -c 'script1' user_1 && su -c 'script2' user_2

这将(假设您以 root 身份启动)在运行 script1 之前将用户更改为 user_1,然后返回到 root,然后更改为 user_2 以运行 script2.. 所有这些都不需要多个密码。

【讨论】:

听起来不错,但我的脚本必须在公司服务器上运行。 root 密码只有系统管理员知道。 您能否详细说明为什么需要这两个用户?你有两个密码..你能不能把结果文件放在最后? 这将是一个安装脚本。我们正在为我们的应用程序使用 2 种不同的工具。这两个工具都需要以特殊用户身份安装。该规则是工具生产者所要求的。这些工具的组件是相互构建的。这意味着我必须安装第一个工具而不是启动一些组件。接下来我要安装2.工具,从第一个工具启动其他组件,做一些其他操作。这是粗略的情况。【参考方案4】:

我已经使用 ssh 解决了这个问题。我已经为 user_1 生成了身份验证密钥并发布到 user2。不再需要密码。

ssh -l user_1 hostname  "command_1; command_2"

【讨论】:

以上是关于使用更多用户执行脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何执行从 s3 加载更多脚本的 EMR 步骤?

cmd 执行sql脚本,该怎么处理

以指定用户执行脚本

脚本应用

Linux系统shell脚本之用户管理脚本实战

shell脚本中实现远程和其他用户的子shell执行