如何验证 INCOMING ssh 隧道是否仍在运行以及它属于谁?

如何验证 INCOMING ssh 隧道是否仍在运行以及它属于谁?

请参阅下面的编辑以获取简短版本

我在显示服务器上 ssh 隧道的状态时遇到问题。

以下是一些相关信息:

user001 = remote client's username
123.123.123.123 = ssh server's ip
111.222.111.222 = database server

现在我正在仅连接一个远程客户端进行测试。我可以看到它请求的两个反向隧道(过滤输出):

lsof -i -P
sshd    14652 user001    8u  IPv4 1171285      0t0  TCP localhost:2000 (LISTEN)
sshd    14652 user001    9u  IPv4 1171287      0t0  TCP my.domain.com:2001 (LISTEN)

netstat -atpe --numeric-ports
tcp        0      0 127.0.0.1:2000          0.0.0.0:*               LISTEN      user001    1171285     14652/sshd: user001
tcp        0      0 123.123.123.123:2001     0.0.0.0:*               LISTEN      user001    1171287     14652/sshd: user001

很明显,它们是由 user001 发起的,但它创建的常规 (-L) 隧道未列出lsof。我能找到的与它相关的唯一信息是通过显示的netsat,它甚至似乎不是隧道本身,而是 ssh 服务器和数据库服务器之间的网络连接:

tcp        0      0 123.123.123.123:60299    111.222.111.222:52849     TIME_WAIT   root       0           -               
tcp        0      0 123.123.123.123:60300    111.222.111.222:52849     TIME_WAIT   root       0           -               

这是一个皮塔饼,因为它不仅显示在 root 用户下,而且只显示本地 IP,所以我无法知道它是谁的隧道/连接。当所有 50 多个远程客户端都连接时,故障排除将变得一团糟。

问题:

有没有更好的方法来显示 ssh 隧道?更好的指挥?一些程序?

有没有办法让这个显示在远程客户端的用户下,或者至少显示远程客户端的IP?

为什么lsof不显示它?

谢谢。

- - -编辑 - - -

好吧,如果你想从头开始,这里有一个简化的问题:

SSH客户端连接到SSH服务器并请求从本地端口 100 到端口 5000 的隧道(使用 -L )数据库服务器在同一网络上SSH服务器

所以我们得到一个看起来像这样的隧道:

客户端:100 -----> SSH 服务器 -----> 数据库服务器:5000

当您登录时如何验证该隧道是否已启动SSH服务器

我不想看看是否SSH服务器正在与数据库服务器我想看看隧道是否由SSH客户端仍然活跃。

netstat 显示的信息仅显示服务器有一个从随机端口到 ssh 服务器上端口 5000 的活动连接,它没有说明为什么此连接已建立(没有链接到它的 pid),并且它显示 root 作为所有者(完全没用)。

答案1

我很确定 TIME_WAIT 中的 2 个连接来自服务器连接结束,如果服务器以 root 身份运行,那就有意义了。

请注意,-L 选项并不创建实际的隧道,而只是创建隧道功能。连接到输入 IP/端口的行为导致 SSH 实际上创建到目标 IP/端口的隧道;然后,您将在 lsof/netstat/etc 中看到处于 ESTABLISHED 状态的连接,直到有人关闭连接。

打开另一个终端窗口,只需键入“telnet IP 端口”即可激活隧道(这应该是您使用 -L 指定的隧道前端的 IP/端口),无需键入任何内容。然后弹出到您的服务器窗口并运行 lsof/netstat 命令以查看实际建立的连接。

希望这有帮助...让我知道!

相关内容