我使用命令创建了从服务器到端点的反向隧道:
ssh -R 127.0.0.1:4000:localhost:81 [email protected]
隧道是在 Endpoint 端创建的,它从服务器端口 4000 通向 Endpoint 端口 81。有一个服务正在监听此端口,但这并不重要。我这样做是因为 Endpoint 位于 NAT 后面,我需要从外部访问它。
我想知道我是否可以在 Server 端获取 Endpoint 的 IP。之前有一个类似的问题:
但我的情况比较特殊,我不想手动输入命令,因为到服务器会有很多反向隧道,而我只能使用 Endpoint 绑定到的端口。
换句话说:如何仅使用服务器端的端口 4000 获取端点端的隧道 IP?我无法找到服务器上的端口 4000 与用于隧道目的的已建立 SSH 连接之间的任何关联。
netstat -plant (在服务器上)显示:
tcp 0 0 127.0.0.1:4000 0.0.0.0:* LISTEN 30307/sshd: user
tcp 0 0 8.8.8.8:22 1.2.3.4:44874 ESTABLISHED 12531/sshd: user
tcp 0 0 8.8.8.8:22 15.16.17.18:44258 ESTABLISHED 30203/sshd: user
tcp 0 0 8.8.8.8:22 22.22.22.22:46696 ESTABLISHED 15639/sshd: user
如您所见,有一个服务在端口 4000 上监听(此端口转发到端点端口 81 - 此处不可见)和三个 ssh 连接。其中一个服务于隧道。但我不知道哪一个。8.8.8.8 是服务器的 IP。
答案1
从 netstat 中获取 ssh 的进程 ID,
lsof -p $pid -a -d 3
将显示连接另一端的 IP。由于 ssh 可以跳跃,因此这可能不是最终位置。