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

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

나는 루트로 SSH를 사용한 다음 동일한 시스템에서 다시 SSH로 루트를 설정합니다. 그래서 두 개의 창이 열려 있고 둘 다 SSH를 통해 원격 컴퓨터의 루트 디렉터리에 연결되어 있습니다.

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

답변1

who또는 더 많은 정보 wwho -a얻으세요.

이 명령은 단순히 최종 장치의 모든 로그인 세션을 표시합니다. SSH 세션은 pts열에 표시된 것처럼 의사 터미널 슬레이브( )에 있지만 TTY모든 pts 연결이 SSH 세션인 것은 아닙니다. 예를 들어, xterm또는 screen와 같은 의사 터미널 장치를 생성하는 프로그램은 pts. 바라보다pts와 tty의 차이점TTY열에 있는 다양한 값을 더 잘 설명하세요 . 또한 SFTP 세션은 쉘 로그인 세션이 아니기 때문에 이 방법은 SFTP 세션에 로그인한 사람을 표시하지 않습니다.

모든 SSH 세션을 명시적으로 표시하는 방법을 모르겠습니다. 를 통해 로그인 정보를 읽거나 방금 설명한 것과 같은 도구를 사용하거나 utmp@sebelk의 답변에 설명된 대로 네트워크 도구를 사용하여 포트 22(또는 SSH가 있는 위치)에서 열려 있는 TCP 연결을 찾아 이 정보를 추론할 수 있습니다. 어디서나) 데몬이 듣고 있습니다).wtmplastwwho

취할 수 있는 세 번째 접근 방식은 SSH 데몬의 로그 출력을 구문 분석하는 것입니다. 운영 체제 배포, 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)

관련 정보