![如何操作:在 Linux 上,用户登录 → 自动执行命令(例如 top)→ 当命令执行停止时自动注销](https://linux22.com/image/1625847/%E5%A6%82%E4%BD%95%E6%93%8D%E4%BD%9C%EF%BC%9A%E5%9C%A8%20Linux%20%E4%B8%8A%EF%BC%8C%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%20%E2%86%92%20%E8%87%AA%E5%8A%A8%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4%EF%BC%88%E4%BE%8B%E5%A6%82%20top%EF%BC%89%E2%86%92%20%E5%BD%93%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E5%81%9C%E6%AD%A2%E6%97%B6%E8%87%AA%E5%8A%A8%E6%B3%A8%E9%94%80.png)
我可以在 Linux 上创建一个用户并对其进行配置,以便当我使用 ssh 登录时执行一条命令,并且当该命令完成后强制用户注销。
答案1
这是完全可能的。我使用以下命令执行GNU 屏幕登录时自动执行,退出屏幕时自动退出会话:
cat << _EOF_ > /etc/profile.d/00-micha.sh
# Autostart screen and auto logout
[ "\$TERM" != 'screen' ] && screen -U -S sshscreen -d -R && exit
_EOF_
为了使其仅适用于 SSH 会话中的当前用户:
cat << _EOF_ >> ~/.profile
# Start myCommand on SSH login sessions and exit when myCommand stops
[ -n "\${SSH_TTY}" ] && myCommand && exit
_EOF_
- 这会将代码行添加到当前用户文件的末尾
.profile
,该文件在所有登录会话中执行/获取,通过 SSH 登录时应该如此。 - 它通过检查设置变量来检查是否是 SSH 会话
SSH_TTY
,该变量至少由 OpenSSH 和 Dropbear SSH 服务器自动设置。还有其他可能性,但这种方法快速且可靠。 - 它执行
myCommand
(当然,用你的命令 + 参数替换),并在命令退出时退出成功地。我更喜欢这种方式,这样在出现错误时,您可能希望以交互方式调查问题,而不是无法通过 SSH 以该用户身份登录(命令崩溃时自动注销)。但是,如果您甚至希望它在出现myCommand
错误时注销/退出,您可以将代码行调整为:[ -n "${SSH_TTY}" ] && { myCommand; exit; }
Bash
并且zsh
还有一堆其他文件是在不同类型的登录/会话期间获取的,因此如果您需要更具体的信息,我可以添加更多详细信息,或者您可能需要 shell 手册页,例如 bash(“调用”部分):https://linux.die.net/man/1/bash