연결된 모든 SSH 세션을 나열 하시겠습니까? 동일한 컴퓨터의 루트에 SSH를 다시 ​​입력했습니다.

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

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



답변

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:

답변

당신은 또한 사용할 수 있습니다

ps ax | grep sshd

답변

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

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

답변

@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 스크립트에서 이것을 사용했다. 누군가가 귀하의 로그인을 사용하여 시스템에 있는지 확인하는 것은 보안이 취약한 장치였습니다.