Відповіді:
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 в 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'
на Ubuntu 14.04.
-i
доступний лише для ароматів mac / bsd. на ubuntu ви можете використовувати pgrep -af ssd
. Детальніше дивіться на сервері default.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
, через який він відображає кількість часу, оскільки сприймається з'єднання
Розгортання відповіді на @ sebelk:
Використання рішення netstat
є хорошим, але вимагає привілеїв root. Крім того, 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