我正在探索将当前 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”行。您应该能够通过这种方式将远程会话链接到一组特定的日志条目。