问题

当登录用户退出 ssh 会话时,如何执行特定的脚本或者命令。

所以这就像配置一个 post 脚本或者触发器来在用户退出 ssh 会话时执行所需的操作。

CentOS/RHEL 如何设置在用户注销 ssh 会话时运行脚本或者命令
更多: zhilu jiaocheng

解决方法

这可以在 CentOS/RHEL 系统中的 pam 模块的帮助下轻松完成。
按照下面列出的步骤配置 pam 模块。

  1. 将以下条目添加到 pam 配置文件 /etc/pam.d/sshd :
# vi /etc/pam.d/sshd
session     optional    pam_exec.so quiet /var/tmp/post_session.sh

其中:
/var/tmp/post_session.sh 是我们的脚本,它将在用户注销时运行。

/etc/pam.d/sshd 配置文件应如下所示:

# cat /etc/pam.d/sshd 
#%PAM-1.0
auth    required pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
account    required     pam_nologin.so
account    required     pam_access.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed 
in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
####Trigger with user logout #####
session     optional    pam_exec.so quiet /var/tmp/post_session.shsession    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare
  1. 现在我们可以根据需要配置后触发脚本。
    在本文中,我们将只把用户注销的时间添加到一个文件中。
    例如:
# cat /var/tmp/post_session.sh
#!/bin/bash
if [ "$PAM_TYPE" = "close_session" ]; then
date >> /var/tmp/user_logout.out        ##  This is the action to be performed when user logs out.
fi
  1. 授予/var/tmp/post_session.sh 脚本的执行权限。
# chmod ugo+x /var/tmp/post_session.sh
  1. 通过多次登录和注销进行验证,我们应该将所有注销的时间添加到文件 /var/tmp/user_logout.out 中。
日期:2020-09-17 00:12:19 来源:oir作者:oir