Список всех подключенных сеансов SSH?

Я просто SSH'd в root, а затем SSH снова включился на один и тот же компьютер. Таким образом, у меня есть два окна, открытых как SSH'd в root на моей удаленной машине.

Из оболочки, как я могу увидеть список этих двух сеансов?

145 голосов | спросил themirror 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 27 Sep 2013 01:28:46 +0400 2013, 01:28:46

5 ответов


157

who или w; who -a для получения дополнительной информации.

Эти команды просто показывают все сеансы входа в систему на терминальном устройстве. Сессия SSH будет находиться на псевдотерминальном подчиненном (pts), как показано в столбце TTY, но не все соединения pts являются сеансами SSH. Например, программы, создающие псевдотерминальное устройство, такие как xterm или screen, будут отображаться как pts. См. Разница между очками и tty для лучшего описания различных значений, найденных в столбца TTY. Кроме того, этот подход не будет показывать никого, кто вошел в сеанс SFTP, поскольку сеансы SFTP не являются сеансами входа в систему.

Я не знаю, как явным образом показать все сеансы SSH. Вы можете вывести эту информацию, прочитав регистрационную информацию из utmp /wtmp с помощью инструмента, такого как last, w, или who, как я только что описал, или используя сетевые инструменты, такие как @sebelk, описанные в их ответе, чтобы найти открытые tcp-соединения на порту 22 (или там, где ваш /s-демон (SSH) прослушиваются /прослушиваются).

Третий подход, который вы можете предпринять, - это проанализировать вывод журнала из SSH-демона. В зависимости от вашего дистрибутива ОС, дистрибутива 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

Журналы показывают, когда сеансы открываются и закрываются, к кому принадлежит сессия, к которой пользователь подключается, и тому подобное. Тем не менее, вам придется выполнять парсинг lot , если вы хотите получить это из простого, удобного для человека журнала событий в список активных в данный момент сеансов, и он, вероятно, выиграл Если вы закончите синтаксический разбор, то будете точным списком, поскольку в журналах на самом деле нет достаточной информации, чтобы определить, какие сеансы все еще активны - вы, по сути, просто гадаете. Единственное преимущество, которое вы получаете при использовании этих журналов, заключается в том, что информация поступает непосредственно из SSHD, а не через исходный источник, как и другие методы.

Я рекомендую просто использовать w. В большинстве случаев это даст вам необходимую информацию.

ответил jayhendren 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 27 Sep 2013 01:55:00 +0400 2013, 01:55:00
89

Вы можете просмотреть каждый сеанс ssh с помощью следующей команды:

[[email protected] ~]# 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

O, возможно, это может быть полезно:

[[email protected] ~]# ps auxwww | grep sshd:
root      1341  0.0  0.4  97940  3952 ?        Ss   20:31   0:00 sshd: [email protected]/0 
root      1360  0.0  0.5  97940  4056 ?        Ss   20:32   0:00 sshd: [email protected]/1 
root      1397  0.0  0.1 105300   888 pts/0    S+   20:37   0:00 grep sshd:
ответил sebelk 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 27 Sep 2013 03:34:56 +0400 2013, 03:34:56
10

Вы также можете использовать

ps ax | grep sshd
ответил Joel Inglao 10 Maypm16 2016, 16:33:31
3

Добавлен для простой справки.

Если вы находитесь в псевдо-оболочке (пример: /dev /pts /0) одним из самых простых способов было бы:

[[email protected] ~]$ echo $SSH_CONNECTION

Он должен вернуть: ваш ip и порт и ip, к которому вы подключились, и порт

192.168.0.13 50473 192.168.0.22 22

Вы также можете получить некоторую информацию с помощью tty или who (w): (изменить: я вижу, что теперь это список выше в другом запись)

[[email protected] ~]$ who
user1 tty1          2018-01-03 18:43
user2 pts/0        2018-01-03 18:44 (192.168.0.13)
ответил 4 Jam1000000amThu, 04 Jan 2018 03:48:21 +030018 2018, 03:48:21
1

Расширение ответа @ sebelk:

Решение, использующее netstat, является хорошим, но требует привилегий root. Кроме того, пакет net-tools (который предоставляет netstat) был устаревшим в некоторых более новых дистрибутивах Linux ( https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking- команды-и-их-замены /).

Альтернативным решением является использование замены для netstat, ss. Например (обратите внимание, что вам больше не нужен root):

[email protected]:~# 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
ответил A.Meijer 4 Maypm18 2018, 12:22:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132