現在、SSHセッションをSSHDログに関連付ける方法を探しています。
私の目標は、私のSSHセッションに関連するSSHDログからのみ特定の情報を抽出することです。
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...
1つのオプションは、SSHログイン中に記録されたSSHD pidをマッピングすることです。SSHD[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_接続セッションのクライアントIPアドレスとポート、クライアントが接続されているサーバー側アドレス、およびポートという4つの値が含まれています。私の例では、「::1」はIPv6ローカルホストアドレスです。 SSH_CLIENTは文書化されていませんが、同じ3つの値が含まれています。私の考えでは、SSH_CONNECTIONに置き換えられた古い環境変数のようです。
sshdプロセスの一部のログエントリには、例の「accepted pubkey」行など、クライアントのアドレスとポートも含まれています。このようにして、リモートセッションを特定のログエントリセットに関連付けることができるはずです。