Назад | Перейти на главную страницу

Получение списка открытых ssh-соединений по имени

У меня есть файл конфигурации в моем каталоге .ssh, который выглядит так

Host somehostA
HostName 123.45.67.89
User katsh

Итак, с моей локальной машины я могу использовать ssh на нескольких машинах по их имени в файле конфигурации, например

ssh somehostA
ssh somehostB
ssh somehostC
...
etc

Можно ли получить список всех компьютеров, к которым я подключен, по их имени?

Я знаю, что могу:

 lsof -i tcp -n | grep '\<ssh\>'

и я получу что-то вроде

ssh        9871 katsh    3u  IPv4 400199      0t0  TCP 987.654.2.2:47329->987.654.2.2:47329:ssh (ESTABLISHED)
ssh       20554 katsh    3u  IPv4 443965      0t0  TCP 123.456.7.8:41923->123.456.7.8:ssh (ESTABLISHED)

Но в нем не указаны их имена, только IP

Если вам просто нужен список имен, вы можете сделать что-то вроде этого

sudo netstat -atp | grep 'ESTABLISHED.*ssh ' | awk '{print $5}'| sed 's/:ssh//'
  • получить список используемых портов
  • отфильтровать те, которые связаны с ssh. Вам нужен пробел после ssh для удаления входящих подключений к локальному sshd.
  • получить имя из списка
  • удалите: ssh

Пример вывода без фильтра для sshd

host1.lan
192.168.1.71:51053
192.168.1.71:50323
host2.lan
192.168.1.71:50929

который показывает исходящие соединения с host1 и host2, но также показывает входящие соединения для сеансов замазки, которые у меня есть на демонстрационном хосте.

Пример вывода с отфильтрованными локальными sshd-соединениями

host1.lan
host2.lan

В w похоже, это делает команда - я подключился с моей тестовой виртуальной машины, со своего рабочего стола (BLACKBEAUTY), а затем перешел с виртуальной машины на мой VPS (example.com - не мой настоящий домен), и результат выглядит следующим образом

USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
geek     pts/2    blackbeauty      21:31    1:46   0.63s  0.02s ssh example.com
geek     pts/3    blackbeauty      21:32    0.00s  0.57s  0.00s w

Свяжите это с grep ssh и вы должны иметь возможность извлекать строки, где ЧТО такое ssh для большей ясности.

$ sudo netstat -atp | grep 'ESTABLISHED.*ssh'