使用Docker1.12.1,我面临一种奇怪的行为,试图访问用ssh -R
创建的主机端口。
基本上,我尝试从运行在服务器上的码头容器访问本地计算机上运行在端口12345上的服务。
我打开了与ssh -R *:12345:localhost:12345 user@server
的ssh连接,打开server
上的端口12345
,该端口在本地机器上转发到端口12345
。
现在,当我尝试容器内的curl https://172.17.42.1:12345
(172.17.42.1
是从码头容器访问对接主机的IP )时,我得到:
root@f6873fe1109b:/# curl https://172.17.42.1:12345
curl: (7) Failed to connect to 172.17.42.1 port 12345: Connection refused
但在server
上,命令curl http://localhost:12345
成功(例如。没有拒绝连接)
server$ curl http://localhost:12345
curl: (52) Empty reply from server
我不太明白使用ssh进行的端口绑定与服务器上的nc
测试有何不同(它可以工作):
# on server
nc -l -p 12345
# inside a container
root@f6873fe1109b:/# curl http://172.17.42.1:12345
curl: (52) Empty reply from server
注意:容器是用docker run -it --rm maven:3-jdk-8 bash
启动的。
如何允许容器访问与ssh绑定相对应的主机端口?
发布于 2016-09-27 10:27:03
来自man ssh
-R . ..。只有在启用服务器的bind_address选项时,才能指定远程GatewayPorts
和man sshd_config
GatewayPorts 指定是否允许远程主机连接到为客户端转发的端口。默认情况下,sshd(8)将远程端口转发绑定到环回地址。这将阻止其他远程主机连接到转发的端口。GatewayPorts可用于指定sshd应允许远程端口转发绑定到非环回地址,从而允许其他主机进行连接。该参数可能是“否”,以强制远程端口转发仅对本地主机可用,“是”强制远程端口转发绑定到通配符地址,或“指定客户端”以允许客户端选择将转发绑定到的地址。默认值为“no”.
这意味着默认的sshd服务器安装只允许创建绑定到本地接口的转发。如果您希望允许转发到其他接口,然后循环,则需要将GatewayPorts
选项设置为/etc/ssh/sshd_config
中的yes
或clientspecified
。
https://stackoverflow.com/questions/39720341
复制相似问题