记录特定成功的SSH登录和disconections

问题描述:

好日子,记录特定成功的SSH登录和disconections

我试图记录成功的ssh登录和断开特定用户的时间。即我想在SSH连接建立和关闭时触​​发一个bash脚本。

我一直在试图理解不只是pam_exec多少成功的PAM.d模块可能是我所期待的。

这里是journalctl日志当用户我断开后再重新连接:

May 31 00:47:31 myhostname.com sshd[11517]: Connection closed by 41.113.99.123 
May 31 00:47:31 myhostname.com sshd[11517]: Transferred: sent 10160, received 12196 bytes 
May 31 00:47:31 myhostname.com sshd[11517]: Closing connection to 41.113.99.123 port 24976 
May 31 00:47:31 myhostname.com sshd[12377]: pam_unix(sshd:session): session closed for user myuser 
May 31 00:47:31 myhostname.com systemd-logind[4406]: Removed session 24778. 
May 31 00:47:52 myhostname.com sshd[11964]: Connection from 41.113.99.123 port 24989 on 178.79.130.104 port 22 
May 31 00:47:55 myhostname.com sshd[11964]: Postponed publickey for myuser from 41.113.99.123 port 24989 ssh2 [preauth] 
May 31 00:47:56 myhostname.com sshd[11964]: Accepted publickey for myuser from 41.113.99.123 port 24989 ssh2: RSA SHA256:R0y/xxxxxxxxxxxxxxxx/HuC6vZp/xxxxxxxxxxxxxx 
May 31 00:47:56 myhostname.com sshd[11964]: pam_unix(sshd:session): session opened for user myuser by (uid=0) 
May 31 00:47:56 myhostname.com systemd-logind[4406]: New session 24786 of user myuser. 
May 31 00:47:56 myhostname.com systemd[1]: Started Session 24786 of user myuser. 
May 31 00:47:57 myhostname.com sshd[11964]: User child is on pid 12009 

是否有执行脚本的效率(可能PAM)的方式时,“会话”开和关的“myuser的? 如果可能的话,将有可能暴露相关的PID如图所示的最后一行?

感谢

所以,很多搜索和实验后,我才意识到,无论PAMñ或者ssh及其守护进程的所有奇特功能都可以用来实现我的目标。我发现使用-N选项建立一个ssh反向隧道不同于普通的ssh登录。我会试着解释为什么。

有了这样的方式,这是我做了什么。

SSH Access Control是相当精辟的总结这篇文章。这说明PAM适用于SSH进程的位置。 PAM允许各种“模块”来补充和增强认证/登录过程。我在我的问题中遇到的一个这样的模块是pam_exec()。其中包括我在/etc/pam.d/sshd文件的末尾,如下所示:

session optional pam_exec.so debug log=/tmp/pam_exec.log seteuid /usr/local/bin/login_auth 

当时的想法是,当用户建立SSH连接,这将大火,可以登录/采取一些行动脚本。该脚本工作,但执行该命令的“shell”是有限的,只有最少的一组会话信息。像SSH_CONNECTION即正常SSH环境变量是不可用,并从所述远程客户端(-o SendEnv=LC_MYVAR)发送的任何环境变量也不可用(LC_MYVAR)。事实证明,这仅适用于反向隧道类型的ssh连接,通常不会建立一个感谢-N选项的shell。

总之,人们可以非常漂亮,用上面的方法来捕获用户名和任何连接的IP,甚至像SSH_CONNECTION用于交互式登录的详细信息。

我需要在这一点上我试图实现澄清。我在“字段”中有多个设备,它们被编程为在可能时建立反向ssh隧道。这个想法是在每个设备连接和断开连接时监视服务器端,从而了解连接问题。问题是我把它们全部用相同的用户和sshkey来设置。所以区分它们只能在我设置的远程端口上通过。 2222,2223,2224,2225,2226等。我需要获取并记录有关连接和断开连接的信息。

最后,我不得不承认并使用日志tail的方法,如:

tail -F /var/log/auth.log | grep "Connection closed by" | /usr/bin/myscript