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


184

방금 루트에 SSH를 넣은 다음 동일한 컴퓨터의 루트에 SSH를 다시 ​​입력했습니다. 그래서 원격 컴퓨터의 루트에 SSH로 연결된 두 개의 창이 있습니다.

쉘에서이 두 세션의 목록을 어떻게 볼 수 있습니까?

답변:


188

who또는 w; who -a추가 정보가 필요합니다.

이 명령은 터미널 장치의 모든 로그인 세션 만 표시합니다. SSH 세션은 열에 pts표시된대로 의사 터미널 슬레이브 ( ) TTY에 있지만 모든 pts 연결이 SSH 세션 인 것은 아닙니다. 예를 들어 xterm또는 같은 의사 터미널 장치를 만드는 프로그램 screen은로 표시됩니다 pts. 열에 있는 다른 값에 대한 자세한 설명은 pts와 tty의 차이점을 참조하십시오 TTY. 또한 SFTP 세션은 셸 로그인 세션이 아니기 때문에 SFTP 세션에 로그인 한 사람은이 방법으로 표시되지 않습니다.

모든 SSH 세션을 명시 적으로 표시하는 방법을 모르겠습니다. 당신은에서 로그인 정보를 읽어 정보를 추론 할 수있다 utmp/ wtmp와 같은 도구를 통해 last, w또는 who어디서든 SSH 포트 22 (또는에서 열린 TCP 연결을 찾기 위해 나는 방금 설명한 것 같은, 또는 자신의 대답에 설명 @sebelk 같은 네트워킹 도구를 사용하여 데몬이 듣고 있습니다).

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

[myhost ~]% cat /var/log/sshd.log | grep hendrenj | 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. 대부분의 경우 원하는 정보를 얻을 수 있습니다.



접선 적으로 관련된 문제를 검색하는 동안이 문제를 발견했습니다. 중요하지 않습니다. 이것은 모든 스택 사이트에서 본 최고의 답변 중 하나입니다! 나는 이제이 특정 영역에 대해 더 많은 것을 알고 있습니다 (더 나은 단어가 없음). 편집 : 감사합니다!
jscharf

107

다음 명령으로 모든 세션 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:

4
감사합니다; 이 답변은 쉘에 로그인 한 사용자 만 나열하는 최상위 답변보다 훨씬 낫습니다. 이 솔루션은 SFTP 사용자도 찾습니다.
헤이든 쉬프

1
요즘 대부분의 상자에서 사용할 수 있습니다pgrep -ai sshd
ccpizza

@ ccpizza : pgrep: invalid option -- 'i'우분투 14.04에.
Martin Schröder

2
@ MartinSchröder : -imac / bsd 맛에서만 사용할 수 있습니다. 우분투에서 사용할 수 있습니다 pgrep -af ssd. 자세한 내용은 serverfault.com/a/883270/116777 을 참조하십시오
ccpizza

@HaydenSchiff와 마찬가지로 쉘없이 포트 전달을 위해 SSH 터널 만 열려있는 사용자를 찾아야했습니다. 도움이되었습니다!
Tobias K.


7

간단한 참조를 위해 추가되었습니다.

가상 쉘 (예 : / 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)

Bash 글로벌을 다루는 이전 답변을 확장합니다. SECONDS전 세계를 언급하는 것이 좋습니다 . 이를 통해 echo $SECONDS이를 사용 하면 인식 된 연결 이후 시간이 표시됩니다.
NerdOfCode

현재 사용중인 세션에 대한 정보가 표시됩니다. 그러나 질문은 현재 연결된 모든 세션 을 나열하는 방법을 묻습니다 .
G-Man

6

@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

2

당신이 사용할 수있는

last | head

나는 최근에 누가 시스템에 로그인했는지를보기 위해 .login 스크립트에서 이것을 사용했다. 누군가가 귀하의 로그인을 사용하여 시스템에 있는지 확인하는 것은 보안이 취약한 장치였습니다.


1
...하지만 반드시 활성 세션 목록이 될 필요는 없습니다 (이 질문의 내용). 로그인 활동에 따라 실행 한 세션 last도 나열되지 않을 수 있습니다.
muru December

1
"last -p now"는 모든 현재 ssh 세션을 나열합니다.
JO Williams

@JOWilliams last지원 되는 버전 은 -p무엇입니까? 무엇을합니까?
mwfearnley

@mwfearnley 버전은 "last from util-linux 2.31.1"확실합니다.
V.7
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.