我有多台机器通过反向 SSH 隧道连接到一台服务器。因此,每台机器都在运行以下命令:
while true; do
ssh -X -R 19999:localhost:22 www.sern.pro
sleep 30
done
此处19999
将根据不同的连接而变化(例如19990
,19991
等等)。可以使用以下命令从服务器访问这些反向 SSH 连接:
ssh -X localhost -p 19999
服务器如何显示活动的反向 SSH 连接列表?我曾尝试使用,netstat
但这需要预先了解正在使用的本地端口,并且无法明确表明这是反向 SSH 连接:
# netstat --all --timers | grep "19999"
tcp 0 0 localhost.localdo:19999 *:* LISTEN off (0.00/0/0)
tcp6 0 0 ip6-localhost:19999 [::]:* LISTEN off (0.00/0/0)
根据 @frank-thomas 的建议,我尝试使用该命令netstat --all --timers --program --numeric | grep ssh
查找非标准 SSH 进程。当我这样做时,在netstat
TCP 列表之后,我得到了如下 UNIX 列表:
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ] DGRAM 64179539 28569/sshd: username [pr P475
unix 3 [ ] STREAM CONNECTED 60024486 14205/sshd: username [pr P60024485
unix 3 [ ] STREAM CONNECTED 62232808 5088/sshd: username [pri P62232133
unix 2 [ ] DGRAM 60024422 14205/sshd: username [pr P475
unix 3 [ ] STREAM CONNECTED 64180927 28569/sshd: username [pr P64180926
unix 3 [ ] STREAM CONNECTED 8303 3911/sshd P8304
unix 3 [ ] STREAM CONNECTED 60024487 14205/sshd: username [pr P60024488
unix 2 [ ] DGRAM 62232598 5088/sshd: username [pri P475
unix 3 [ ] STREAM CONNECTED 64180931 28569/sshd: username [pr P64180932
unix 3 [ ] STREAM CONNECTED 62232798 5088/sshd: username [pri P62232797
如何解释这些数据以列出服务器上正在使用的反向 SSH 隧道端口?如何从中得出 19999 这样的数字?
答案1
您可以使用以下方式获取它:
netstat -anp | egrep ‘127.0.0.1:*(LISTEN|.*)’ | 排序
此命令列出所有活动端口的连接并对其进行排序。
如果您有一个仅包含 40000 到 45000 的端口范围,您可以将 4 添加到 egrep 如“127.0.0.1:4*(LISTEN|.*)”以仅获取以 4 开头的端口,而不是获取所有端口。
答案2
你可以使用
sudo ss -ltp | grep sshd
列出sshd
进程打开以进行监听的所有 TCP 端口,包括默认监听器(通常在 上tcp/22
,但如果您选择为sshd
守护进程配置备用端口,则在其他地方)。然后,您可以检查列出的 PID 以确定哪个用户打开了ssh
正在监听每个端口的连接。