更改为root用户的shell脚本里面(Changing to root user inside s

2019-06-26 12:18发布

我有一个shell脚本,需要非root用户帐户来运行某些命令,然后更改用户以root运行脚本的其余部分。 我现在用SUSE11。 我用期待自动化密码提示。 但是,当我用菌种苏 - 和命令执行后,及时回来与根和脚本的其余部分不执行。

例如。

< non-root commands>
 spawn su -
<root commands>

但之后su - 提示与用户以root身份返回。 如何执行剩余的脚本。

须藤-S选项没有帮助,因为它不执行sudo -S ifconfig命令,我需要找到本机的IP地址。

我已经通过这些链接走了,但一直没找到解决办法: 更改脚本目录用户的主目录中的shell脚本

在shell脚本修改UNIX用户

Answer 1:

sudo将在这里工作,但你必须改变你的脚本一点点:

$ cat 1.sh 
id 
sudo -s <<EOF
echo Now i am root
id
echo "yes!"
EOF

$ bash 1.sh
uid=1000(igor) gid=1000(igor) groups=1000(igor),29(audio),44(video),124(fuse)
Now i am root
uid=0(root) gid=0(root) groups=0(root)
yes!

您需要在运行命令<<EOF块,并给该块sudo

如果你愿意,你可以使用su ,当然。 但是,你需要使用运行它expect/pexpect ,会为你输入密码。

但即使情况下,你可以设法进入自动密码(或将其关闭),这种结构是行不通的:

user-command
su 
root-command

在这种情况下root-command将与用户之后执行,而不是使用根权限,因为它会被执行su将完成( su打开一个新的外壳,电流壳的未改变UID)。 你可以在这里使用同样的伎俩,当然:

su -c 'sh -s' <<EOF
# list of root commands
EOF

但是,现在你有一样用sudo



Answer 2:

有一个简单的方法来做到这一点没有第二个脚本。 只要把这个你的文件的开头:

if [ "$(whoami)" != "root" ]
then
    sudo su -s "$0"
    exit
fi

然后,它会自动运行自己为根。 当然,这是假定你可以sudo su ,而无需提供密码-但这是出于这个答案的范围; 请参阅有关shell脚本使用sudo如何做到这一点的其他问题之一。



Answer 3:

要做到这一点最简单的方法是创建一个至少有两个脚本。

第一个应该调用第二个具有root权限。 所以,你在第二个脚本执行的每一个命令会以root身份执行。

例如:

runasroot.sh

sudo su-c'./scriptname.sh'

scriptname.sh

apt-get install mysql-server-5.5

或任何你需要的。



Answer 4:

短版:创建块包围,以root身份运行所有命令。

例如,我创建一个脚本来从根子目录运行命令,段是这样的:

sudo su - <<EOF
cd rootSubFolder/subfolder
./commandtoRun
EOF


文章来源: Changing to root user inside shell script
标签: shell su