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


13

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


您要在远程计算机上还是从其初始化连接的计算机上执行命令?
xx4h 2014年

Answers:


20

最好的方法是使用pam

在其中,/etc/pam.d您将有几个文件,其中一个称为sshd。如果只想影响ssh,而不希望影响其他登录名(例如GUI或真实的TTY),则需要此文件。
如果要影响所有登录,则需要一个“通用”文件。该另一个“公用”文件的名称因发行版而异,但是您可以通过遵循文件中的includeand 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脚本)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.