根据名称获取已打开的 ssh 连接列表

根据名称获取已打开的 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

答案1

如果你只是想要一个名字列表,你可以这样做

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

答案2

w命令似乎可以做到这一点 - 我从我的测试虚拟机连接到我的桌面(BLACKBEAUTY),然后从虚拟机 ssh 到我的 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 是什么的行,以便更加清晰地了解。

答案3

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

相关内容