답변:
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
. 대부분의 경우 원하는 정보를 얻을 수 있습니다.
다음 명령으로 모든 세션 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:
pgrep -ai sshd
pgrep: invalid option -- 'i'
우분투 14.04에.
-i
mac / bsd 맛에서만 사용할 수 있습니다. 우분투에서 사용할 수 있습니다 pgrep -af ssd
. 자세한 내용은 serverfault.com/a/883270/116777 을 참조하십시오
간단한 참조를 위해 추가되었습니다.
가상 쉘 (예 : / 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)
SECONDS
전 세계를 언급하는 것이 좋습니다 . 이를 통해 echo $SECONDS
이를 사용 하면 인식 된 연결 이후 시간이 표시됩니다.
@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
당신이 사용할 수있는
last | head
나는 최근에 누가 시스템에 로그인했는지를보기 위해 .login 스크립트에서 이것을 사용했다. 누군가가 귀하의 로그인을 사용하여 시스템에 있는지 확인하는 것은 보안이 취약한 장치였습니다.
last
도 나열되지 않을 수 있습니다.
last
지원 되는 버전 은 -p
무엇입니까? 무엇을합니까?
"last from util-linux 2.31.1"
확실합니다.
who -a