Unix:“su 用户”不工作,如果有条件,在 SSH 中仍然是 root
Unix: ‘su user’ not working and remains root inside SSH if condition
我一直在研究 bash 脚本并且遇到了奇怪的问题。基本上,我从本地服务器以 root 身份 SSH 到远程服务器并尝试 运行 一些命令。其中一个命令是将用户从 root 更改为服务帐户。为此,我使用命令 "su " 并将其更改为服务帐户。但奇怪的是,当我 运行 在 'if condition' 中执行相同的命令时,它仍然只是 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
请帮忙!
谢谢,
席德
这并不奇怪,但也在意料之中。 su
不是某种神奇的切换,而是产生一个具有提升权限的新进程。 serviceAccount
您想做的所有事情都需要在 su
调用中完成。
对于您示例中的非交互式使用,-c
选项很方便:
su -c 'startup.sh' serviceAccount
我一直在研究 bash 脚本并且遇到了奇怪的问题。基本上,我从本地服务器以 root 身份 SSH 到远程服务器并尝试 运行 一些命令。其中一个命令是将用户从 root 更改为服务帐户。为此,我使用命令 "su " 并将其更改为服务帐户。但奇怪的是,当我 运行 在 'if condition' 中执行相同的命令时,它仍然只是 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
请帮忙!
谢谢, 席德
这并不奇怪,但也在意料之中。 su
不是某种神奇的切换,而是产生一个具有提升权限的新进程。 serviceAccount
您想做的所有事情都需要在 su
调用中完成。
对于您示例中的非交互式使用,-c
选项很方便:
su -c 'startup.sh' serviceAccount