如何操作:在 Linux 上,用户登录 → 自动执行命令(例如 top)→ 当命令执行停止时自动注销

如何操作:在 Linux 上,用户登录 → 自动执行命令(例如 top)→ 当命令执行停止时自动注销

我可以在 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

相关内容