Unix:‘su user’不起作用,如果有条件,则保持root身份在SSH中

问题描述 投票:0回答:1

我一直在研究bash脚本,并且遇到了奇怪的问题。基本上,我以root身份从本地服务器SSH到远程服务器,并尝试运行一些命令。命令之一是将用户从root更改为服务帐户。为此,我使用命令“ su”并将其更改为服务帐户。但是奇怪的是,当我在“如果条件”中运行相同的命令时,它仅保留为root帐户。这是代码段:

  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

请帮助!

谢谢,Sid

linux unix ssh command-line su
1个回答
0
投票

这并不奇怪,但可以预期。 su不是某种魔术切换,而是产生了一个权限提升的新进程。您想作为serviceAccount进行的所有操作都需要在su调用中完成。

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

su -c 'startup.sh' serviceAccount
© www.soinside.com 2019 - 2024. All rights reserved.