У меня есть файл конфигурации в моем каталоге .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//'
Пример вывода без фильтра для 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'