从脚本中注销当前用户

从脚本中注销当前用户

我想创建一个脚本:

  1. 运行一些命令
  2. 执行 sudo su - [其他用户名]
  3. 退出 [其他用户名] 后 -> 注销

例如:test.sh

echo "test script"
sudo su
logout

如果我运行这样的脚本:

echo "test"
sudo su
whomai

我得到了想要的结果:

[wolfy@ubuntusrv ~ ]# ./test.sh
test
[root@ubuntusrv wolfy]# date
Fri 19 Jun 10:56:52 CEST 2015
[root@ubuntusrv wolfy]# echo bla
bla
[root@ubuntusrv wolfy]# exit
wolfy
[wolfy@ubuntusrv ~ ]#

正如你所见,脚本运行了我的回声命令然后我须藤苏到 root,我可以在那里做我需要做的事情,在我退出 root 会话后,脚本执行最后一个(我是谁) 命令。

我的问题是我无法在该脚本结束时自行注销。

我需要一种无需 root 权限即可执行此操作的方法。

有人能帮我吗?

补充说明:

  1. 当我运行 sudo su - username (userA) 时,我需要提供我的密码 (wolfy) 才能以其他用户 (userA) 身份登录。然后,我会与该用户 (userA) 进行整个会话,当我从该用户 (userA) 注销时,我希望自动从我的 (wofly) 用户注销。
  2. 使用 sudo 命令不是一个选项

答案1

也许你想做的就是:

exec ./test.sh

这将用脚本替换您当前的 shell 进程,以便当它完成时就没有任何内容可运行。

答案2

通常,以 root 身份运行命令sudo就足够了。

#!/bin/bash
echo test
sudo whoami

如果您出于某种原因坚持使用su,您可以使用 -c 标志:

#!/bin/bash
echo test
sudo su -c whoami

以下是两种情况下的结果:

$ ./test.sh                                                                                                                           
test
[sudo] password for xieerqi: 
root

如果你想进入 root shell,请使用sudo -i

serg@ubuntu[/home/xieerqi] 
$ sudo -i
# date
Fri Jun 19 13:16:15 EEST 2015
# whoami
root
# exit
serg@ubuntu[/home/xieerqi] 
$ 

使用 su :

serg@ubuntu[/home/xieerqi] 
$ sudo su -c /bin/bash
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
root@anaconda:/home/xieerqi# date
Fri Jun 19 12:41:06 EEST 2015
root@anaconda:/home/xieerqi# echo blah
blah
root@anaconda:/home/xieerqi# exit
exit
serg@ubuntu[/home/xieerqi] 
$ whoami
xieerqi

如果你想以其他用户(不仅是 root 用户)的身份运行命令,你可以使用sudo -u username command

$ sudo -u testuser whoami
testuser

相同的想法su

serg@ubuntu[/home/xieerqi] 
$ sudo su -c bash testuser
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
testuser@anaconda:/home/xieerqi$ whoami
testuser
testuser@anaconda:/home/xieerqi$ exit
exit
serg@ubuntu[/home/xieerqi] 
$ whoami
xieerqi

答案3

脚本中的Alogout不会影响任何内容,因为它logout仅适用于登录 shell,而脚本通常不作为登录 shell 运行。

在我看来,您是通过 SSH(或其他方式)登录的,以另一个用户身份运行,然后立即注销。在这种情况下,只需获取脚本,以便命令在您当前的 shell 中运行。然后,logout就可以了。

或者,您可以使用exec,但在这种情况下,它不会logout生效 -logout会失败,并且脚本的结尾只会使其退出。我想,没有区别。

或者,如果你发现使用很麻烦. ./script,可以用括号定义一个函数:

switchuser () {
  echo "test script"
  sudo su -
  exit
}

括号中的命令在当前 shell 中运行,圆括号中的命令在子 shell 中运行。将其添加到您的.bashrc,然后您只需执行以下操作:

switchuser

相关内容