【问题标题】: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 没有安装。

【问题讨论】:

    标签: bash su


    【解决方案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"
    

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多