현재 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" 줄과 같이 클라이언트의 주소와 포트도 포함되어 있습니다. 이런 방식으로 원격 세션을 특정 로그 항목 집합에 연결할 수 있어야 합니다.