我的 .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
如果你只想要一个名字列表,你可以做这样的事情
sudo netstat -atp | grep 'ESTABLISHED.*ssh ' | awk '{print $5}'| sed 's/:ssh//'
Run Code Online (Sandbox Code Playgroud)
一些示例输出,没有 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)
该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 的行,以便更清晰。