список всех подключенных сессий ssh?

<p>я просто ssh'd в корень, а затем ssh'd снова в корень на той же машине. таким образом, у меня есть два открытых окна ssh'd в root на моей удаленной машине.</p><p>из командной строки, как я могу увидеть список этих двух сессий?</p>

<p><code>who</code> или <code>w</code>; <code>who -a</code> для дополнительной информации.</p><p>эти команды просто показывают все сеансы входа в систему на терминальном устройстве. сеанс ssh будет на псевдо-терминальном подчиненном устройстве (<code>pts</code>), как показано в столбце <code>tty</code>, но не все соединения pts являются сеансами ssh. например, программы, которые создают псевдо-терминальное устройство, такое как <code>xterm</code> или <code>screen</code>, будут отображаться как <code>pts</code>. смотрите <a href="https://unix.stackexchange.com/questions/21280/difference-between-pts-and-tty">разница между pts и tty</a> для лучшего описания различных значений, найденных в столбце <code>tty</code>. кроме того, этот подход не покажет никому, кто вошел в сеанс sftp, так как сеансы sftp не являются сеансами входа в систему shell.</p><p>я не знаю ни одного способа явно показать все сессии ssh. вы можете получить эту информацию, прочитав информацию для входа в систему из <code>utmp</code>/<code>wtmp</code> с помощью таких инструментов, как <code>last</code>, <code>w</code> или <code>who</code>, как я вы только что описали или использовали сетевые инструменты, такие как @sebelk, описанные в их ответе, чтобы найти открытые соединения tcp на порту 22 (или там, где слушает (-ют) ваш демон ssh).</p><p>третий подход, который вы можете использовать, - это анализ выходных данных журнала от демона ssh. в зависимости от дистрибутива вашей ос, дистрибутива ssh, конфигурации и т.д. выходные данные журнала могут находиться в разных местах. на коробке rhel 6 я нашел логи в <code>/var/log/sshd.log</code>. на коробке rhel 7, а также на коробке arch linux мне нужно было использовать <code>journalctl -u sshd</code> для просмотра журналов. некоторые системы могут выводить журналы ssh в системный журнал. ваши журналы могут быть в этих местах или в другом месте. вот пример того, что вы можете увидеть:</p><pre><code>[myhost ~]% grep hendrenj /var/log/sshd.log | 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 </code></pre><p>журналы показывают, когда сеансы открываются и закрываются, кому принадлежит сеанс, откуда пользователь подключается и многое другое. тем не менее, вам придется выполнить <em> партию </em> анализа, если вы хотите получить это из простого, понятного человеку журнала событий в список активных в данный момент сеансов, и он, вероятно, не будет точным списком, когда вы закончите синтаксический анализ, так как журналы на самом деле не содержат достаточно информации, чтобы определить, какие сеансы все еще активны - вы, по сути, просто догадываетесь. единственное преимущество, которое вы получаете, используя эти журналы, состоит в том, что информация поступает непосредственно из sshd, а не из вторичного источника, как другие методы.</p><p>я рекомендую просто использовать <code>w</code>. в большинстве случаев это даст вам необходимую информацию.</p>

<p>вы можете увидеть каждый сеанс ssh с помощью следующей команды:</p><pre><code>[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 </code></pre><p>о, возможно, это может быть полезно:</p><pre><code>[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: </code></pre>

<p>вы также можете использовать</p><pre><code>ps ax | grep sshd </code></pre>

<p>расширяя ответ @ себелька:</p><p>решение, использующее <code>netstat</code>, является хорошим, но требует привилегий root. в дополнение <code>net-tools</code> пакет (который обеспечивает <code>netstat</code>) устарел в некоторых более новых дистрибутивах linux ( <a href="https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/">https://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and -ая-замена /</a> ).</p><p>альтернативное решение - использовать замену для <code>netstat</code>, <code>ss</code>. например (обратите внимание, вам больше не нужен root):</p><pre><code>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 </code></pre>

<p>добавлено для простой ссылки.</p><p>если вы находитесь в псевдооболочке (пример:/dev/pts/0), одним из самых простых способов будет:</p><pre><code>[user1@host ~]$ echo $ssh\_connection </code></pre><p>он должен вернуть: ваш ip и порт и ip, к которому вы подключены и порт</p><pre><code>192.168.0.13 50473 192.168.0.22 22 </code></pre><p>вы также можете получить некоторую информацию, используя <code>tty</code> или <code>who</code> (<code>w</code>): (edit: я вижу, что теперь это список выше в другом посте)</p><pre><code>[user1@host ~]$ who user1 tty1 2018-01-03 18:43 user2 pts/0 2018-01-03 18:44 (192.168.0.13) </code></pre>

<p>ты можешь использовать</p><pre><code>last | head </code></pre><p>я использовал это в своем скрипте .login в течение многих лет, чтобы увидеть, кто недавно вошел в систему. это было устройство с плохой безопасностью, чтобы посмотреть, не был ли кто-то в системе, используя ваш логин.</p>

<p>я выполнил почти все вышеперечисленные команды, и я думаю, что лучший способ найти вошедших в систему пользователей через ssh:</p><pre><code>last | grep "still logged in" </code></pre><p>а также</p><pre><code>who -a </code></pre>