【问题标题】:Unix: ‘su user’ not working and remains root inside SSH if conditionUnix:“su 用户”不工作,如果条件允许,则在 SSH 中保持 root
【发布时间】:2020-08-28 22:08:10
【问题描述】:

我一直在研究 bash 脚本并遇到了奇怪的问题。基本上,我从本地服务器以 root 身份通过 SSH 连接到远程服务器并尝试运行一些命令。其中一个命令是将用户从 root 更改为服务帐户。为此,我使用命令“su”并将其更改为服务帐户。但奇怪的是,当我在“if condition”中运行相同的命令时,它只保留为 root 帐户。这是代码的sn-p:

  echo "Enter host name you want to start: "
  read remote

  echo "Enter password for $remote : "
  read -s remote_pass

  sshpass -p$remote_pass ssh -T -o StrictHostKeyChecking=no $remote <<EOF
      ps -ef | grep -i tomcat | grep -i bootstrap | awk '{print \$2}'

      if [ -z "\$(ps -ef | grep -i tomcat | awk '{print \$2}')" ]
        then
          echo "$remote: Need to start server"
          su serviceAccount -----------> This doesn't work inside if controller
          startup.sh ---------> I want to run this script using serviceAccount and not as root!!!
        else
          echo "$remote: Already up and running"
      fi
      echo "#######################################################"
      echo
EOF

请帮忙!

谢谢, 席德

【问题讨论】:

    标签: linux unix ssh command-line su


    【解决方案1】:

    这并不奇怪,而是意料之中的。 su 不是某种魔法切换,而是产生一个具有更高权限的新进程。您想以serviceAccount 执行的所有操作都需要在su 调用中完成。

    对于示例中的非交互式使用,-c 选项很方便:

    su -c 'startup.sh' serviceAccount
    

    【讨论】:

    • 感谢您的解决方案。我对此很陌生。我有一个问题,当在 if 循环之前执行 'su' 时,下面的整个代码作为 serviceAccount 工作。但不是当我在 if 循环中登录时。这就是我觉得奇怪的地方。
    • 如果您将sucommand 放在您的“*.com/questions/3420280/…
    最近更新 更多