SSH 转发在本地有效,但在远程失败

SSH 转发在本地有效,但在远程失败

我在远程机器上做了端口 SSH 本地转发:

ssh -N -L 127.0.0.1:3388:127.0.0.1:22 localhost

它在远程机器本身上运行:

telnet localhost 3388

返回

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4

但是,当我从本地机器使用此转发时:

telnet remote.ip 3388

它失败:

Trying remote.ip...
telnet: Unable to connect to remote host: Connection refused

有人可能会认为远程机器的 3388 端口被防火墙或网络等阻止了,因此我关闭了 SSH 转发并测试了一个在远程机器上监听 3388 端口的 http 服务器:

python3 -m http.server 3388

然后我从本地机器连接到该端口:

telnet remote.ip 3388

结果显示

Trying remote.ip...
Connected to remote.ip.
Escape character is '^]'.
quit
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
        <title>Error response</title>
    </head>
    <body>
        <h1>Error response</h1>
        <p>Error code: 400</p>
        <p>Message: Bad request syntax ('quit ').</p>
        <p>Error code explanation: HTTPStatus.BAD_REQUEST - Bad request syntax or unsupported method.</p>
    </body>
</html>
Connection closed by foreign host.

这意味着远程机器上的端口 3388 可供我的本地机器访问。那么为什么 SSH 转发和网络单独工作正常,但当它们组合在一起时却失败了?有人知道如何解决这个问题吗?谢谢。

答案1

您设置了 SSH 本地转发,以便它仅监听本地主机端口 3388。网络上的其他设备无法访问本地主机,这就是您无法远程建立连接的原因。

为了将转发端口公开给网络上的其他机器,您需要将其绑定到可访问的地址,例如 192.168.1.5 或 0.0.0.0(所有接口)。

例如ssh -N -L 0.0.0.0:3388:127.0.0.1:22 localhost

相关内容