
내 운영 체제에 ssh를 통해 로그인하는 여러 사용자가 있는 경우 각 /dev/pts/N(여기서 N은 정수)과 연관된 물리적 시스템을 찾을 수 있는 방법이 있습니까? 내가 아는 전부는
WHO
그리고
보조 키
이 명령은 장치 파일과 연결된 사용자 또는 프로세스를 표시하지만 사용자/프로세스가 발생한 실제 시스템에 대한 자세한 정보를 얻을 수 있습니까? 아마도 IP일까요?
답변1
예를 들어 SSH(및 mosh)는 실제로 utmp
/ 파일을 채우고 원격 IP 주소를 포함한 몇 가지 유용한 정보를 읽습니다.wtmp
who
last
~$ who
...
ilkkachu pts/26 2022-05-03 16:27 (127.0.0.1)
$ last -1a
ilkkachu pts/26 Tue May 3 16:27 still logged in 127.0.0.1
올바른 tty 이름을 찾기 위해 grep을 원할 수도 있습니다.
$ who | grep "pts/26"
ilkkachu pts/26 2022-05-03 16:27 (127.0.0.1)
또는 열린 파일 목록을 추적하여 tty에서 fd를 보유하는 SSH 프로세스를 찾은 다음 해당 네트워크 소켓을 찾을 수 있습니다.
답변2
의사 터미널은 "물리적 기계"와 연관되지 않습니다. 이는 실행 중인 프로세스(예: ssh 세션, GUI 터미널 창, screen/tmux의 창 등)와 연결됩니다. 이를 사용하여 ps
어떤 프로세스가 특정 장치를 사용하고 있는지 찾아 pts
거기에서 역추적할 수 있습니다.
수행하려는 작업에는 ss
(또는 netstat
) 명령이 더 유용할 수 있습니다. 예를 들어 다음 명령을 실행하여 활성 SSH 연결과 연결된 원격 주소를 찾을 수 있습니다.
$ ss -tnp | grep sshd | grep ESTAB
ESTAB 0 0 192.168.1.200:22 1.2.3.4:39240 users:(("sshd",pid=2706,fd=3))
ESTAB 0 0 192.168.1.200:22 4.3.2.1:39242 users:(("sshd",pid=2809,fd=3),("sshd",pid=2771,fd=3))