我在远程机器上做了端口 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