如何将 sshd 日志映射到当前的 ssh 会话?

如何将 sshd 日志映射到当前的 ssh 会话?

我正在探索将当前 SSH 会话与 SSHD 日志关联起来的方法。

我的目标是从 SSHD 日志中提取仅与我的 SSH 会话相关的特定信息。

Jul 04 09:39:06 linuxbox sshd[1122]: Accepted publickey for testuser from 1.2.3.4 port 123 ssh2: RSA-CERT ID test (serial 1) CA RSA fingerprint...

一种选择是映射 ssh 登录期间记录的 sshd pidsshd[1122]当前 ssh 会话 pid。但我找不到获取当前 ssh 会话 pid 的方法。

或者除了匹配 PID 之外还有其他方法可以将我的会话映射到 sshd 日志吗?

testuser@linuxbox:~$
testuser@linuxbox:~$ sudo systemctl status sshd
* ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-07-04 09:10:20 UTC; 29min ago
       Docs: man:sshd(8)
             man:sshd_config(5)
    Process: 1023 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
   Main PID: 1024 (sshd)
      Tasks: 1 (limit: 1109)
     Memory: 2.7M
     CGroup: /system.slice/ssh.service
             `-1024 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
Jul 04 09:39:03 linuxbox sshd[1122]: rexec line 126: Deprecated option UsePrivilegeSeparation
Jul 04 09:39:06 linuxbox sshd[1122]: Accepted publickey for testuser from 1.2.3.4 port 123 ssh2: RSA-CERT ID test (serial 1) CA RSA fingerprint...
Jul 04 09:39:06 linuxbox sshd[1122]: pam_unix(sshd:session): session opened for user testuser by (uid=0)
testuser@linuxbox:~$ date
Tue 04 Jul 2023 09:39:50 AM UTC
testuser@linuxbox:~$ ps -ef | grep sshd
root         881       1  0 09:05 ?        00:00:00 sshd: testuser [priv]
root         884       1  0 09:05 ?        00:00:00 sshd: testuser [priv]
testuser     893     881  0 09:05 ?        00:00:00 sshd: testuser@pts/0
testuser     904     884  0 09:05 ?        00:00:00 sshd: testuser@notty
root        1024       1  0 09:10 ?        00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root        1122    1024  0 09:39 ?        00:00:00 sshd: testuser [priv]
testuser    1124    1122  0 09:39 ?        00:00:00 sshd: testuser@pts/1
testuser    1151    1125  0 09:39 pts/1    00:00:00 grep --color=auto sshd
testuser@linuxbox:~$

答案1

要获取当前会话的 PID,您可以使用pstree标志-s(“显示所选进程的父级”)。

$ pstree -sp $$
systemd(1)───sshd(1583)───sshd(30575)───sshd(30577)───tcsh(30579)───pstree(30915)

会话的相关 PID 是主 PID sshd 进程的子进程,您可以使用以下命令找到它:

$ systemctl show -p MainPID sshd
MainPID=1583

所以你的会话的PID是30575

一旦获得当前会话的 PID,您就可以使用journalctl

journalctl -u sshd _PID=30575

答案2

OpenSSH SSH 服务器设置了一些您可以使用的环境变量:

$ ssh localhost
Last login: Tue Jul  4 17:36:10 2023 from ::1
$ set | grep SSH
SSH_CLIENT='::1 50359 22'
SSH_CONNECTION='::1 50359 ::1 22'
...

SSH_CONNECTION包含四个值:会话的客户端 IP 地址和端口,以及客户端连接到的服务器端地址和端口。在我的示例中,“::1”是 IPv6 本地主机地址。 SSH_CLIENT 没有记录,但包含三个相同的值 - 我猜测它是一个较旧的环境变量,已被 SSH_CONNECTION 取代。

sshd 进程的一些日志条目还包含客户端的地址和端口,例如示例中的“accepted pubkey”行。您应该能够通过这种方式将远程会话链接到一组特定的日志条目。

相关内容