首页 > 解决方案 > Bash:如何注销/退出运行脚本的用户

问题描述

我有一个 bash 脚本,它创建几个目录等,创建一个反向 SSH 隧道,使用用户的加密密钥(它被解密并在登录时由 pam_ssh 启动一个 ssh-agent),然后启动一个 tmux 会话并分离(等待稍后重新连接)。至此,一切都完成了,我想确保执行脚本的用户将被注销。

原因如下:只允许特定用户(将来可能是 root)执行这个脚本,所以当regular_user我在终端时我会这样做:su special_user./special_script.sh现在如果我忘记注销并让终端保持打开状态 - 有人可以再次运行该脚本,所以我希望在其结束时./special_script.shspecial_user退出他的会话,将他返回到regular_user.

备注:special_user被支持人员使用,regular_users他们在他们的会话中帮助他们,所以有一天支持人员很可能会忘记注销而让他的会话闲置。理想情况下,它会使用类似的东西sudo special_user special_script.sh,但重要的是special_user将请求密码(传递给 ssh-agent)。

可能吗?

标签: linuxbashsessionsshterminal

解决方案


当您无法使用sudo或将脚本嵌入到 setuid 位的常规可执行文件中时(请参阅https://unix.stackexchange.com/a/369/57293 ,您可以尝试操作.bashrcspecial_user

special_script.sh
exit 0

请注意,所有解决方案都需要审查special_script.sh何时涉及安全性。当 special_script.sh 调用类似vior的程序sqlplus时,用户可以打开一个 shell 并在该 shell 中执行所有操作。


推荐阅读