比较 Unix 客户端与服务器之间的 tty/pts ssh 会话

比较 Unix 客户端与服务器之间的 tty/pts ssh 会话

是否可以列出带有 tty/pts 信息以及客户端上的登录和注销日期的 ssh 会话?相当于服务器上的最后一个命令。

我的用户使用代理 ssh 连接到服务器,但从代理服务器他们使用通用帐户连接到服务器。我想比较客户端和服务器之间的 tty/pts id。在服务器上,我使用此脚本获取当天的以下信息:

#!/bin/bash
today="$(date '+%a %b %e')"
last | awk -v pattern="$today" '$0 ~ pattern && /pts/ {print $0 "#line#"}'
exit 0

谢谢

答案1

简而言之

使用两台机器上的 ssh 日志:它会为您提供生成的 shell 的 PID。这应该允许您将 shell 的 PID 与程序的执行联系起来,并与 tty 进行一定的匹配。为了进行更深入的审计,您可以使用审计工具。

换句话说

last

使用简单的方法,last您可以获得与所用 tty 相关的连接列表。
您可以有两个列表,一个来自您的代理人机器(我想称之为网关,GW),另一个来自你的服务器。该命令last默认为您提供用户名、pts/tty、IP/主机名。登录约会时间,登出日期时间。您可以修改格式等等。

然后,你必须研究该时期的叠加并猜出是谁。

我发现的问题是,通过这种方式,你必须创建一个工具(脚本)来提供所有可能的匹配项,并在找到好的匹配项的同时清除它们。尽管如此,你还是可能会遇到奇怪的情况。

让我们来做个案例研究。第一个用户,比如说 Nicolas,可以登录 GW。然后他去喝咖啡或接电话。与此同时,第二个用户,比如说 Hastur,登录 GW 并比第一个用户登录服务器的速度更快。就在此刻,你的双重登录很复杂。现在 Hastur 觉得需要喝杯咖啡,而 Nicolas 登录服务器。谁会是第一个喝完咖啡并第一个连接到程序的人?

/var/log/auth(或其他 ssh 日志文件)[1] .

有日志文件用于监控每个系统的登录和注销。搜索正确的路径和名称,这些路径和名称取决于系统。使用

sudo grep TheUsername /var/log/auth.log

你将获得类似如下的行

May  1 16:17:43 owl sshd[9024]: Accepted publickey for root from 192.168.0.101 port 37384 ssh2
May  1 16:17:43 owl sshd[9024]: pam_unix(sshd:session): session opened for user root by (uid=0)

您有正确的登录时间,甚至 PID([9024])和 IP。这次您可以将此文件的数据与last命令之一进行匹配以了解 tty,或者您可以以某种方式在程序内部记录调用程序本身的 shell 的 PID(可以通过对 shell 的系统调用来完成)。

通过处理这些文件,您可以为每个会话获得唯一的匹配。对于网关上的类似日志文件,您将获得原始 IP 和用户名。

audit tools[2],[3]

如果您有授权并且这是合法的,您可以使用审计工具并在主机上对 shell 进行完整的日志记录。

参考

  • [1] 记录 SSH 访问尝试
  • [2] shell / ssh / tty 会话记录器
  • [3] 远程主机上的 BASH shell 会话日志记录

相关内容