我的 .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'