我在我的 中添加了一些命令.bashrc
,因此每次登录时我都可以看到活动的 SSH 连接。然而,由于类似的端口号包含“22”,例如“223346”,它有时不仅仅显示 SSH 连接
这是运行的命令:
netstat -tan | grep ":22\|ssh" | grep -v "LISTEN" | awk '{print " "$4" -> "$5" "$6}'
有时它会输出这样的东西:
192.168.1.75:52623 -> 213.174.2.30:22650 SYN_SENT
192.168.1.75:22 -> 192.168.1.109:60561 ESTABLISHED
有没有办法使用 grep 只显示 SSH 连接?谢谢!
答案1
如果在 Linux 上,请注意 的手册页ss
有一个确切的示例:
ss -o state established '( dport = :ssh or sport = :ssh )'
也可以看看
lsof -i tcp:22
或者:
lsof -i :53
(tcp 或任何其他传输协议)。
但请注意,lsof
如果您不是超级用户,则不会列出您不拥有的进程的信息。
答案2
我会通过这个测试来接近它:
- 已建立的连接,以及
- 包括其中之一传入(字段3的端口是22)或出境(字段 4 的端口是 22)连接 - 此处锚定在
:
和 字段末尾之间$
。
您可以调整逻辑以包括任何一个传入或传出,如果这就是您所追求的。
如果您使用netstat的-n
标志,那么您不必搜索“ssh”;要更精细并要求在尝试解析 IP 时仅端口为数字(在 Linux 上),请使用--numeric-ports
.我还删除了-a
netstat 标志,以过滤掉“LISTEN”行(因为它们没有连接到另一个端点)。由于我只打印已建立的连接,因此我还从输出中删除了字段 6(“ESTABLISHED”);这很容易添加回来,无论是静态还是动态。
netstat -n | awk '$6 == "ESTABLISHED" && ($3 ~ /:22$/ || $4 ~ /:22$/) { print $4 " -> " $5}'
或者
netstat --numeric-ports | awk '$6 == "ESTABLISHED" && ($3 ~ /:22$/ || $4 ~ /:22$/) { print $4 " -> " $5}'