如何统计SSH ControlMaster连接数?排查SSH连接缓慢问题
统计到远程服务器的SSH连接数(含ControlMaster复用连接)的可靠方法
一、统计TCP层面的活跃SSH物理连接
这部分能得到实际建立的TCP连接数量(ControlMaster复用的是同一个物理连接,所以这里的计数就是主连接的数量)
用
ss命令(比netstat更轻量高效):ss -tn state established '( dport = :22 or sport = :22 )' | grep <远程服务器IP> | wc -l说明:
-tn仅显示TCP连接且不解析主机名,state established过滤已建立的连接,再筛选目标为远程服务器22端口的连接,最后统计行数得到连接数。若习惯用netstat:
netstat -tn | grep ESTABLISHED | grep <远程服务器IP> | grep -E ':22\s' | wc -l
二、统计ControlMaster复用的会话数
ControlMaster通过UNIX套接字实现连接复用,需要结合套接字和进程信息统计:
先确认SSH配置中的控制套接字路径,一般在
~/.ssh/config里:grep -E 'ControlPath|ControlMaster' ~/.ssh/config常见配置示例:
ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h:%p统计当前存活的主连接套接字数量:
ls -l ~/.ssh/sockets/ | grep -v total | wc -l这个数字应和前面TCP连接数一致,每个套接字对应一个存活的主连接。
查看单个主连接下的复用会话数:
针对具体套接字,用lsof查看关联进程:lsof -U ~/.ssh/sockets/<用户名>@<远程服务器IP>:22 | wc -l结果减1即为该主连接下的复用会话数(减1是因为主连接进程本身会被统计在内)。
验证主连接是否正常存活:
ssh -O check <远程用户>@<远程服务器IP>返回
Master running (pid XXXX)则表示该主连接正常,可被复用。
三、统计总SSH会话数(含复用)
如果要统计所有发起的SSH会话(包括主连接和复用会话),直接查看相关SSH进程即可:
ps aux | grep ssh | grep -v grep | grep <远程服务器IP> | wc -l
这个计数包含了主连接进程和所有复用的会话进程,能直观反映当前到目标服务器的SSH会话总数。
内容的提问来源于stack exchange,提问作者fakedrake
相关产品推荐
相关产品推荐

