通过名称获取打开的SSH连接列表

我的.ssh目录中有一个configuration文件,看起来像这样

Host somehostA HostName 123.45.67.89 User katsh 

所以从我的本地机器,我可以在configuration文件中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

一些输出示例,没有为sshdfilter

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

其中显示了到host1和host2的传出连接,但也显示了我必须与演示主机进行的putty会话的入站连接。

本地sshd连接的一些示例输出被滤除了

 host1.lan host2.lan 

w命令似乎这样做 – 我从我的testing虚拟机连接,从我的桌面(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.00sw 

grep ssh和你绑在一起,你应该能够提取哪些是ssh的行,以便更清晰。

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