연결된 모든 SSH 세션을 나열하시겠습니까?

연결된 모든 SSH 세션을 나열하시겠습니까?

방금 루트에 SSH를 연결한 다음 동일한 시스템의 루트에 다시 SSH를 연결했습니다. 그래서 원격 컴퓨터의 루트에 SSH로 연결된 두 개의 창이 열립니다.

셸에서 이 두 세션의 목록을 어떻게 볼 수 있나요?

답변1

who또는 w; who -a추가 정보를 원하시면.

이 명령은 터미널 장치의 모든 로그인 세션을 표시합니다. SSH 세션은 pts열에 표시된 것처럼 의사 터미널 슬레이브( )에 있지만 TTY모든 pts 연결이 SSH 세션인 것은 아닙니다. 예를 들어, xterm또는 screen와 같은 의사 터미널 장치를 생성하는 프로그램은 pts. 보다pts와 tty의 차이점TTY열에 있는 다양한 값에 대한 더 나은 설명을 보려면 또한 SFTP 세션은 셸 로그인 세션이 아니기 때문에 이 접근 방식에서는 SFTP 세션에 로그인한 사람이 표시되지 않습니다.

모든 SSH 세션을 명시적으로 표시하는 방법을 모르겠습니다. , 또는 방금 설명한 것과 같은 도구를 통해 utmp/ 에서 로그인 정보를 읽 거나 답변에 설명된 @sebelk와 같은 네트워킹 도구를 사용하여 포트 22(또는 SSH 데몬이 듣고 있습니다).wtmplastwwho

취할 수 있는 세 번째 접근 방식은 SSH 데몬의 로그 출력을 구문 분석하는 것입니다. OS 배포, SSH 배포, 구성 등에 따라 로그 출력이 다양한 위치에 있을 수 있습니다. RHEL 6 상자에서 /var/log/sshd.log. RHEL 7 상자와 Arch Linux 상자에서도 journalctl -u sshd로그를 보려면 사용해야 했습니다. 일부 시스템에서는 SSH 로그를 syslog에 출력할 수 있습니다. 귀하의 로그는 다음 장소나 다른 곳에 있을 수 있습니다. 다음은 표시될 수 있는 내용의 샘플입니다.

[myhost ~]% grep hendrenj /var/log/sshd.log | grep session
May  1 15:57:11 myhost sshd[34427]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May  1 16:16:13 myhost sshd[34427]: pam_unix(sshd:session): session closed for user hendrenj
May  5 14:27:09 myhost sshd[43553]: pam_unix(sshd:session): session opened for user hendrenj by (uid=0)
May  5 18:23:41 myhost sshd[43553]: pam_unix(sshd:session): session closed for user hendrenj

로그에는 세션이 열리고 닫히는 시기, 세션이 속한 사람, 사용자가 연결하는 위치 등이 표시됩니다. 그러나 당신은 다음을 수행해야 할 것입니다많은사람이 읽을 수 있는 간단한 이벤트 로그에서 현재 활성 세션 목록으로 이를 가져오려는 경우 구문 분석을 수행해야 합니다. 구문 분석을 마쳤을 때 로그가 그렇지 않기 때문에 여전히 정확한 목록이 아닐 수 있습니다. 실제로 어떤 세션이 아직 활성 상태인지 확인하는 데 충분한 정보가 포함되어 있습니다. 본질적으로 추측일 뿐입니다. 이러한 로그를 사용하여 얻을 수 있는 유일한 이점은 정보가 다른 방법처럼 간접적인 소스를 통하지 않고 SSHD에서 직접 제공된다는 것입니다.

그냥 사용하는 것을 추천합니다 w. 대부분의 경우 이를 통해 원하는 정보를 얻을 수 있습니다.

답변2

다음 명령을 사용하면 모든 세션 ssh를 볼 수 있습니다.

[root@router ~]# netstat -tnpa | grep 'ESTABLISHED.*sshd'
tcp        0      0 192.168.1.136:22            192.168.1.147:45852         ESTABLISHED 1341/sshd           
tcp        0      0 192.168.1.136:22            192.168.1.147:45858         ESTABLISHED 1360/sshd

아니면 이것이 유용할 수도 있습니다:

[root@router ~]# ps auxwww | grep sshd:
root      1341  0.0  0.4  97940  3952 ?        Ss   20:31   0:00 sshd: root@pts/0 
root      1360  0.0  0.5  97940  4056 ?        Ss   20:32   0:00 sshd: root@pts/1 
root      1397  0.0  0.1 105300   888 pts/0    S+   20:37   0:00 grep sshd:



       

답변3

@sebelk의 답변을 확장하면 다음과 같습니다.

사용하는 솔루션 netstat은 좋은 솔루션이지만 루트 권한이 필요합니다. 또한 net-tools패키지( 제공 netstat)는 일부 최신 Linux 배포판(https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/).

대체 솔루션은 대체 솔루션을 사용하는 것 입니다 netstat. ss예를 들어(더 이상 루트가 필요하지 않습니다):

user@router:~# ss | grep ssh
tcp    ESTAB      0      0      192.168.1.136:ssh                  192.168.1.147:37620                
tcp    ESTAB      0      0      192.168.1.136:ssh                  192.168.1.147:37628

답변4

간단한 참고를 위해 추가했습니다.

의사 셸(예: /dev/pts/0 )에 있는 경우 가장 간단한 방법 중 하나는 다음과 같습니다.

[user1@host ~]$ echo $SSH_CONNECTION

다음이 반환되어야 합니다: 귀하의 IP와 포트, 그리고 귀하가 연결된 IP와 포트

192.168.0.13 50473 192.168.0.22 22

tty또는 who( )를 사용하여 일부 정보를 얻을 수도 있습니다 w. (편집: 이제 다른 게시물의 위 목록에 표시됩니다.)

[user1@host ~]$ who
user1 tty1          2018-01-03 18:43
user2 pts/0        2018-01-03 18:44 (192.168.0.13)

관련 정보