5

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

4

4 回答 4

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

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

于 2010-09-07T10:11:59.690 回答
1

如果你碰巧有 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
...

用户1_脚本:

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

如果您遇到困难并且拥有 zsh,那么无论如何都值得一试。

于 2010-09-07T11:20:39.310 回答
1

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

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

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

于 2010-09-09T16:03:27.413 回答
0

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

ssh -l user_1 hostname  "command_1; command_2"
于 2010-09-16T11:37:10.820 回答