Ответы:
who
или w
; who -a
для дополнительной информации.
Эти команды просто показывают все сеансы входа в систему на терминальном устройстве. Сеанс SSH будет на псевдо-терминале slave ( 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
. В большинстве случаев это даст вам необходимую информацию.
Вы можете увидеть каждый сеанс 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'
в Ubuntu 14.04.
-i
доступно только для Mac / BSD. на Ubuntu вы можете использовать pgrep -af ssd
. См. Serverfault.com/a/883270/116777 для подробностей
Вы также можете использовать
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)
SECONDS
глобальные. Вы можете использовать это через echo $SECONDS
, который затем отображает количество времени, так как воспринимается соединение
Расширяя ответ @ себелька:
Использование решения netstat
является хорошим, но требует привилегий root. Кроме того, 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
Вы можете использовать
last | head
Я использовал это в своем скрипте .login в течение многих лет, чтобы увидеть, кто недавно вошел в систему. Это было устройство с плохой защитой, чтобы увидеть, был ли кто-то в системе, используя ваш логин.
last
может не отображаться.
last
поддерживает -p
? Что оно делает?
"last from util-linux 2.31.1"
имеет это точно.
who -a
команды