我的.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的传出连接,但也显示了我对演示主机的putty会话的入站连接.
过滤掉本地sshd连接的一些示例输出
host1.lan host2.lan