我正在通过 SSH 登录到系统,并且希望能够强制在注销时运行命令,无论是有意注销(退出 shell)还是因为我的 SSH 连接已断开/已终止。有什么办法可以设置这个吗?我现在最好的猜测是将登录 shell 更改为一个程序,该程序拦截 SSH 关闭时发送的信号(SIGHUP?)并执行命令,但我想知道是否有更干净的解决方案。
答案1
最好的方法是使用帕姆。
您/etc/pam.d
将有多个文件,其中之一将被称为sshd
.如果您只想影响 ssh,而不影响其他登录(例如 GUI 或真正的 TTY),则需要此文件。
如果您想影响所有登录,则需要一个“通用”文件。这个其他“通用”文件的名称因发行版而异,但您可以通过遵循文件中的include
和语句来跟踪它,直到找到基本文件。substack
sshd
确定要使用的文件后/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
脚本)