![如何验证 INCOMING ssh 隧道是否仍在运行以及它属于谁?](https://linux22.com/image/55526/%E5%A6%82%E4%BD%95%E9%AA%8C%E8%AF%81%20INCOMING%20ssh%20%E9%9A%A7%E9%81%93%E6%98%AF%E5%90%A6%E4%BB%8D%E5%9C%A8%E8%BF%90%E8%A1%8C%E4%BB%A5%E5%8F%8A%E5%AE%83%E5%B1%9E%E4%BA%8E%E8%B0%81%EF%BC%9F.png)
请参阅下面的编辑以获取简短版本
我在显示服务器上 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 命令以查看实际建立的连接。
希望这有帮助...让我知道!