我正在尝试通过中间服务器(托管在 AWS EC2 实例上)连接 websocket 服务器(Linux 计算机)和客户端(Web 浏览器)。EC2 实例提供了 websocket 服务器和客户端可以引用的公共 IP。
我的客户端连接到ws://<SERVER>:<PORT>
,其中SERVER
是我的 EC2 实例的地址,而是PORT
我为端口转发打开的任意端口(例如9111
)。
在 websocket 服务器上,我正在运行以下命令:
/usr/bin/ssh -f -N -i $KEY -l ubuntu \
-R $PORT:127.0.0.1:9090 \
-L 9090:$SERVER:$PORT \
$SERVER
其中,$KEY
是 EC2 的私钥,9090
是我的 websocket 服务器使用的端口。我已将 EC2 实例的 ssh 守护程序配置为启用网关端口,并且端口转发工作正常。
当我尝试启动 websocket 服务器时,出现了问题——我收到错误Address already in use
,因为我显然无法在正在转发的端口上启动 websocket 服务器。这不是很标准的做法吗?我做错了什么?
谢谢!
答案1
您的 SSH 的“-L 9090”选项正在打开端口 9090 上的侦听器,这与您的 websocket 服务器冲突。-R 选项应该足够了,并且转发的连接将是双向的,您不需要使用 -L 设置“反向路由”。
除了任何防火墙更改之外,您可能需要在 EC2 SSH 守护程序上启用 GatewayPorts 选项,以允许使用 -R 设置接受来自任何 IP 的连接的端口。