我今天发现,如果我将本地端口X转发到ssh服务器端口Y,并且没有进程正在侦听端口Y,我仍然可以连接到本地端口X(我不会得到通常的& #34;连接被拒绝"错误)。
我在连接到Linux服务器的Windows主机上使用2个不同的SSH客户端进行了测试。
经过一番反思后,我得出的结论是,从纯粹的网络角度来看,这是我应该期待的行为:SSH客户端实际上正在侦听localhost:X,因此可以进行连接。
然而,这导致了一个问题,我有一个明显连接的套接字,与任何人交谈。即使在套接字上发送数据也是一次成功的操作。
所以我的问题是:SSH协议是否以某种方式管理这种情况,即我是否有检测这种情况的策略?如果是的话,我希望在某些SSH客户端和API上支持此功能(今天我使用ssh.net,似乎没有提供此功能)。
如果没有,您将如何进行检测?超时回答?
感谢您的帮助, 阿尔贝托。
答案 0 :(得分:0)
如果服务器无法连接到远程端,唯一的逻辑行为是关闭客户端连接,但这不会比挂起连接好多少。
此外,当SSH服务器在放弃之前等待远程连接一两分钟时,可能会出现这种情况,因此无论如何客户端的连接将在这段时间内打开。
所以实际上没有逻辑替代方案而不是挂起的客户端连接。