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...

한 가지 옵션은 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 주소 및 포트, 클라이언트가 연결된 서버측 주소 및 포트라는 네 가지 값이 포함되어 있습니다. 내 예에서 "::1"은 IPv6 로컬 호스트 주소입니다. SSH_CLIENT는 문서화되어 있지 않지만 동일한 세 가지 값을 포함하고 있습니다. 제 생각에는 SSH_CONNECTION으로 대체된 오래된 환경 변수인 것 같습니다.

sshd 프로세스의 일부 로그 항목에는 예제의 "accepted pubkey" 줄과 같이 클라이언트의 주소와 포트도 포함되어 있습니다. 이런 방식으로 원격 세션을 특정 로그 항목 집합에 연결할 수 있어야 합니다.

관련 정보