给定 ServerB 和 ServerA,我在 ServerB 上运行以下命令来设置远程端口转发,以便到达 serverA 端口 4000 的请求转发到 ServerB:22。

ssh -R 4000:localhost:22 user@serverA

在我的本地机器上,我现在可以通过跳转到 ServerA 端口 4000 来连接到 ServerB。
ssh -J user@serverA user@localhost -p 4000

这有效。

我试图理解为什么以下命令的输出(在 ServerA 上运行时)

sudo lsof -i -P -n

没有达到我的期望。

而不是看到像这样的输出……

...
sshd   TCP 127.0.0.1:4000->serverB:22 (ESTABLISHED)
...

我看到的是这些……

...
sshd     TCP [::1]:4000 (LISTEN)
sshd     TCP 127.0.0.1:4000 (LISTEN)
sshd     TCP 127.0.0.1:4000->127.0.0.1:4340 (ESTABLISHED)
...

这些没有提到 ServerB,特别是最后一行只是建议与另一个随机端口的本地连接。

为什么会这样?鉴于上述情况,我该如何输出有意义的描述?

2

  • 1
    在您的ssh命令中,您没有在任何地方使用 serverB,只有 localhost 和 ServerA,因此很明显您不会连接到 serverB


    – 

  • 第一个 SSH 命令中的 localhost 指的是 ServerB(该命令在 ServerB 上运行)


    – 


最佳答案
1

ssh -R 4000:localhost:22 user@serverA

告诉ServerA在本地监听端口 4000。任何与ServerA上此端口的连接都将转发到端口 22 上的ServerB 。但是, ServerA本身在本地管理转发,这就是为什么lsof只显示如上所示的连接。您可能想要检查 ServerA 上的 SSH 日志,或使用获取从ServerAServerB 的netstat连接