Перечислите все соединили сессии SSH?

Хм. С одной точки зрения можно вывести всю конфигурацию в один httpd.conf файл, но это было бы... трудно считать.

Большинство дистрибутивов разделится, конфигурация при наличии httpd.conf включают подкаталоги. Можно хотеть посмотреть на определенную для дистрибутива документацию, например:

https://help.ubuntu.com/12.04/serverguide/httpd.html

Для Ubuntu каталог конфигурации Apache является/etc/apache2. Основные подкаталоги для Вашего организационного удобства являются conf.d, доступным модификациям, поддерживающим модификации, доступным сайтам и поддерживающим сайты. Вы сохранили бы свою конфигурацию модуля в доступном модификациям каталоге и свои virtualhost конфигурации в доступном сайтам каталоге. Обратите внимание, что *-enabled каталоги содержат символьные ссылки на соответствие *-available каталоги, таким образом, можно иметь в наличии набор вещей, плавающих в *-available, но только активировать их symlinking от *-enabled каталог. Основной httpd.conf файл сделает включение того, что находится в *-enabled каталоги.

RHEL/CentOS не прокладывает себе путь и оставляет его несколько больше до Вашего усмотрения о том, как настроить/etc/httpd базовый каталог. Можно вывести все в/etc/httpd.conf; можно создать подобную структуру каталогов к Ubuntu (и изменить httpd.conf для включения *-available каталоги, которые Вы сделали), или некоторая комбинация этого.

Так, можно хотеть проверить документацию дистрибутива сначала. Как Вы будете видеть с Ubuntu один, они предоставляют ссылки на другие ресурсы.

194
27.09.2013, 00:28
6 ответов

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

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

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

Третий подход, который Вы могли проявить, должен проанализировать вывод журнала от демона SSH. В зависимости от Вашего распределения ОС, распределения SSH, конфигурации, и так далее, Ваш вывод журнала может быть во многих различных местах. На поле RHEL 6 я нашел журналы в /var/log/sshd.log. На поле RHEL 7, и также на поле Arch Linux, я должен был использовать journalctl -u sshd просмотреть журналы. Некоторые системы могли бы произвести журналы SSH к системному журналу. Ваши журналы могут быть в этих местах или в другом месте. Вот образец того, что Вы могли бы видеть:

[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. Большую часть времени это получит Вас информация, которую Вы хотите.

197
27.01.2020, 19:28
  • 1
  • 2
    Найденный этим при поиске мимоходом связанной проблемы. Не имеет значения. Это - один из лучших ответов, которые я видел на любом сайте Стека! Я теперь знаю тонну больше об этой конкретной области (из-за отсутствия лучшего слова).Править:Спасибо! –  jscharf 21.08.2017, 05:25

Вы видите каждую сессию 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

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

[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:
113
27.01.2020, 19:28
  • 1
    Спасибо; этот ответ намного лучше, чем главный ответ, который только перечисляет пользователей, которые зарегистрированы в оболочку. Это решение также находит пользователей SFTP. –  Hayden Schiff 01.05.2017, 21:51
  • 2
    на большинстве полей в наше время можно использовать pgrep -ai sshd –  ccpizza 27.10.2017, 00:03
  • 3
    @ccpizza: pgrep: invalid option -- 'i' на Ubuntu 14.04. –  Reinstate Monica - M. Schröder 14.03.2018, 11:03
  • 4
    @MartinSchröder: -i только доступно на mac/bsd ароматах. на человечности можно использовать pgrep -af ssd. См. serverfault.com/a/883270/116777 для деталей –  ccpizza 14.03.2018, 12:48

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

ps ax | grep sshd
14
27.01.2020, 19:28

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

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

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

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
15
27.01.2020, 19:28

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

last | head

Я использовал это в своем сценарии.login в течение многих лет, чтобы узнать, кто недавно входил в систему. Это было плохое -человек -защитное устройство, чтобы узнать, не зашел ли кто-нибудь в систему, используя ваш логин.

5
27.01.2020, 19:28

Я выполнил почти все вышеперечисленные команды и думаю, что лучший способ найти пользователей, вошедших в систему в данный момент, через ssh

last | grep "still logged in"

И

who -a
6
27.01.2020, 19:28

Теги

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