如何从容器访问主机端口(用ssh -R绑定)?
使用Docker 1.12.1,我遇到了一个奇怪的行为,试图访问使用ssh -R
创建的主机端口。如何从容器访问主机端口(用ssh -R绑定)?
基本上我尝试从运行在服务器上的Docker容器访问在本地机器上的端口12345上运行的服务。
我打开了一个与ssh -R *:12345:localhost:12345 [email protected]
的ssh连接,在server
上打开一个端口12345
,该端口转发到本地机器上的端口12345
。
现在,当我尝试curl https://172.17.42.1:12345
容器内(172.17.42.1
是IP从泊坞窗容器访问泊坞窗主机),我得到:
[email protected]:/# 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
我真的不明白端口绑定怎么做机智^ h SSH从nc
测试服务器上(它的工作原理)的区别:
# on server
nc -l -p 12345
# inside a container
[email protected]:/# curl http://172.17.42.1:12345
curl: (52) Empty reply from server
注:该容器开始docker run -it --rm maven:3-jdk-8 bash
。
我能做些什么来允许我的容器访问对应于ssh绑定的主机端口?
从man ssh
:
-R [...]
...指定远程bind_address如果服务器的GatewayPorts选项启用才会成功
网关端口
指定是否允许远程主机连接到为客户端转发的端口。默认情况下,sshd(8)将远程端口转发绑定到回送地址。这可以防止其他远程主机连接到转发的端口。 GatewayPorts可用于指定sshd应允许远程端口转发绑定到非回送地址,从而允许其他主机进行连接。参数可能是“否”,强制远程端口转发仅对本地主机可用,“是”强制远程端口转发绑定到通配符地址,或者“客户端指定”允许客户端选择地址转发是绑定的。 默认为“否”。
这意味着默认的sshd服务器安装只允许创建绑定到本地接口的转发。如果你要允许转发到其他接口则回送,你需要将GatewayPorts
选项yes
或clientspecified
在/etc/ssh/sshd_config
非常感谢! NB ssh服务必须在'/ etc/ssh/sshd_config'中更改''sudo service ssh restart'后重新启动。 –
另一个注释:'clientspecified'可能是更好的选择,然后是'yes',因为它只会导致转发明确要求它绑定到通配符地址。 Whit'yes'所有未指定绑定地址的转发都绑定到通配符地址。 – mata
通过SSH打开默认端口-R绑定仅本地主机设置 - 你需要使用'-R '*:11443:server1:443''为了让它绑定在其他接口上 – Petesh
感谢您的建议,但它似乎并没有使它的工作。我仍然看到'卷曲:(7)无法连接到172.17.42.1端口11443:连接被拒绝' –
我对你的问题中的事物布局有点困惑。这听起来像你正在尝试[从容器内访问主机端口](http://*.com/questions/31324981/how-to-access-host-port-from-docker-container),所以在这种情况下,答案可能会有所帮助,但我不是100%确定的。 – Petesh