【发布时间】:2011-04-09 02:49:12
【问题描述】:
我正在编写一个调用许多其他脚本的 bash 脚本。
几个脚本必须以 user_1 身份执行,但有几个脚本必须以 user_2 身份执行。
脚本应按严格的顺序调用。我以 user_1 身份启动我的脚本,并多次使用 su 成为 user_2。这些时候 su 需要密码,所以我必须重新输入很多次。
我想避免这种情况,但 su 没有密码参数。
sudo 和 expect 没有安装。
【问题讨论】:
我正在编写一个调用许多其他脚本的 bash 脚本。
几个脚本必须以 user_1 身份执行,但有几个脚本必须以 user_2 身份执行。
脚本应按严格的顺序调用。我以 user_1 身份启动我的脚本,并多次使用 su 成为 user_2。这些时候 su 需要密码,所以我必须重新输入很多次。
我想避免这种情况,但 su 没有密码参数。
sudo 和 expect 没有安装。
【问题讨论】:
为 user_1 和 user_2 创建一个分叉(使用“&”)。他们应该使用“锁定文件”(信号量)进行通信(类似于客户端-服务器)。例如 user_1 正在做某事,而 user_2 检查是“锁定文件”存在于 while ...sleep 循环
也许这很愚蠢,但你可以使用ssh user@localhost结束键
【讨论】:
如果你碰巧有 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,无论如何都值得一试。
【讨论】:
您可以以 root 身份运行。听起来有风险?如果您小心并在每个命令之前使用 su 并添加用户名,则不会:
su -c 'script1' user_1 && su -c 'script2' user_2
这将(假设您以 root 身份启动)在运行 script1 之前将用户更改为 user_1,然后返回到 root,然后更改为 user_2 以运行 script2.. 所有这些都不需要多个密码。
【讨论】:
我已经使用 ssh 解决了这个问题。我已经为 user_1 生成了身份验证密钥并发布到 user2。不再需要密码。
ssh -l user_1 hostname "command_1; command_2"
【讨论】: