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