sshdログを現在のsshセッションにマッピングする方法は?

sshdログを現在のsshセッションにマッピングする方法は?

現在、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」行など、クライアントのアドレスとポートも含まれています。このようにして、リモートセッションを特定のログエントリセットに関連付けることができるはずです。

関連情報