强制命令在注销或断开连接时运行?

强制命令在注销或断开连接时运行?

我正在通过 SSH 登录到系统,并且希望能够强制在注销时运行命令,无论是有意注销(退出 shell)还是因为我的 SSH 连接已断开/已终止。有什么办法可以设置这个吗?我现在最好的猜测是将登录 shell 更改为一个程序,该程序拦截 SSH 关闭时发送的信号(SIGHUP?)并执行命令,但我想知道是否有更干净的解决方案。

答案1

最好的方法是使用帕姆

/etc/pam.d将有多个文件,其中之一将被称为sshd.如果您只想影响 ssh,而不影响其他登录(例如 GUI 或真正的 TTY),则需要此文件。
如果您想影响所有登录,则需要一个“通用”文件。这个其他“通用”文件的名称因发行版而异,但您可以通过遵循文件中的include和语句来跟踪它,直到找到基本文件。substacksshd

确定要使用的文件后/etc/pam.d,将如下行添加到该session部分:

session     optional    pam_exec.so quiet /etc/pam_session.sh

这将导致/etc/pam_session.sh每次有人登录和注销时都会调用(无论是优雅还是不优雅)。

现在您只需要创建/etc/pam_session.sh.下面是一个示例,您可以用来在每次有人注销时运行某些内容:

#!/bin/sh
if [ "$PAM_TYPE" = "close_session" ]; then
  something
fi

(别忘了chmod a+x脚本)

相关内容