如何在docker容器中创建SSH隧道,主机可以访问socks代理?

时间:2017-08-03 08:02:58

标签: docker ssh

我想使用docker容器来创建ssh隧道,因为在Mac上编译Obfuscated OpenSSH时会出现问题,因为它在Ubuntu上很简单。

这是我正在使用的docker文件

FROM rastasheep/ubuntu-sshd:16.04

RUN apt-get update
RUN apt-get install -y software-properties-common python-software-properties
RUN add-apt-repository ppa:zinglau/obfuscated-openssh
RUN apt-get update
RUN apt-get install -y openssh-server
RUN apt-get update
ADD ./Key.pem /var/www/
CMD ["ping", "google.com","-c 3"]

ENTRYPOINT ssh -z -Z obfuscatedkey -4 -i "/var/www/Key.pem" -N -p 53 -D 6969 ubuntu@REMOTE_SERVER_ON_AWS -v

EXPOSE 6969

我遇到的问题是它似乎连接但我无法通过使用127.0.0.1:6969作为代理连接到我的主机上的SOCKS代理。

我已尝试将其作为docker run -i -t NAME -p 127.0.0.1:6969:6969docker run -i -t NAME -P

运行

但是ssh隧道在此步骤中冻结了

debug1: Authentication succeeded (publickey).
Authenticated to REMOTE_SERVER_ON_AWS ([IP_ADDRESS]:53).
debug1: Local connections to LOCALHOST:6969 forwarded to remote address socks:0
debug1: Local forwarding listening on 127.0.0.1 port 6969.
debug1: channel 0: new [port listener]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

问题是您正在容器内创建localhost隧道。要使用该隧道,您需要位于docker容器内。

在docker run命令中使用-p 127.0.0.1:6969:6969时。它表示容器中的端口6969将接收来自您计算机的所有流量。但是容器将从分配给docker容器的IP接收相同的容器。这将是172.2.0.2

你在容器内的ssh隧道只是在收听127.0.0.1而不是172.2.0.2,所以它不会收到这样的流量。所以改变你的Dockefile线

ENTRYPOINT ssh -z -Z obfuscatedkey -4 -i "/var/www/Key.pem" -N -p 53 -D 6969 ubuntu@REMOTE_SERVER_ON_AWS -v

ENTRYPOINT ssh -z -Z obfuscatedkey -4 -i "/var/www/Key.pem" -N -p 53 -D 0.0.0.0:6969 ubuntu@REMOTE_SERVER_ON_AWS -v

如果-D选项不起作用,请使用-L选项