按名称获取打开的 ssh 连接列表

sqr*_*ram 4 linux ssh

我的 .ssh 目录中有一个配置文件,如下所示

Host somehostA
HostName 123.45.67.89
User katsh
Run Code Online (Sandbox Code Playgroud)

所以在我的本地机器上,我可以通过配置文件中的名称通过 ssh 进入多台机器,就像这样

ssh somehostA
ssh somehostB
ssh somehostC
...
etc
Run Code Online (Sandbox Code Playgroud)

是否可以通过名称获取我连接的所有机器的列表?

我知道我可以做到:

 lsof -i tcp -n | grep '\<ssh\>'
Run Code Online (Sandbox Code Playgroud)

我会得到类似的东西

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)
Run Code Online (Sandbox Code Playgroud)

但它没有列出他们的名字,只是 IP

use*_*517 6

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

sudo netstat -atp | grep 'ESTABLISHED.*ssh ' | awk '{print $5}'| sed 's/:ssh//'
Run Code Online (Sandbox Code Playgroud)
  • 获取使用的端口列表
  • 过滤掉那些与 ssh 相关的。ssh 后需要一个空格来删除与本地 sshd 的入站连接。
  • 从列表中获取名称
  • 删除 :ssh

一些示例输出,没有 sshd 过滤器

host1.lan
192.168.1.71:51053
192.168.1.71:50323
host2.lan
192.168.1.71:50929
Run Code Online (Sandbox Code Playgroud)

它显示了到 host1 和 host2 的传出连接,但也显示了我必须连接到演示主机的腻子会话的入站连接。

过滤掉本地 sshd 连接的一些示例输出

host1.lan
host2.lan
Run Code Online (Sandbox Code Playgroud)


Jou*_*eek 5

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
Run Code Online (Sandbox Code Playgroud)

将其与 with 联系起来grep ssh,您应该能够提取 WHAT 是 ssh 的行,以便更清晰。