Encaminhamento remoto de porta dentro dos contêineres do Docker

Estou tentando configurar um contêiner docker que uso para ignorar firewalls / NATS para permitir o acesso SSH aos computadores por trás dessas barreiras de roteamento. Em essência, eu tenho um serviço SSH ouvindo dentro de um contêiner docker, ao qual meus outros computadores se conectam, abrindo um encaminhamento de porta SSH reverso e, em seguida, se eu quiser me conectar a um computador atrás de um firewall, eu me conecto ao meu servidor proxy dockerizado na porta reversa. Exemplo:

Firewalled computer " Bob " se conecta ao servidor proxy:

ssh -R 2024:localhost:22 -N remote.server

Em seguida, eu me conecto ao servidor remoto na porta 2024 de modo a seguir o túnel de volta para baixo e se conectar a localhost:22 em bob:

ssh -p 2024 remote.server

Tudo isso funciona muito bem quando não está dockerized, no entanto, quando tentei mover isso para um serviço dockerized, descobri que meu sshd o servidor dentro do contêiner docker teimosamente se recusa a abrir a porta remota para a frente. Conectando com ssh -vvv na primeira etapa acima dá:

...debug1: Entering interactive session.debug1: pledge: networkdebug3: receive packet: type 4debug1: Remote: Server has disabled port forwarding.debug3: receive packet: type 82debug1: remote forward failure for: listen 2024, connect localhost:22Warning: remote port forwarding failed for listen port 2024debug1: All remote forwarding requests processed

O que soa muito como o meu sshd não está configurado para permitir o encaminhamento remoto de porta. No entanto, meu sshd_config parece pensar que é:

# tail /etc/ssh/sshd_config -n 5GatewayPorts yesAllowTcpForwarding yesAllowStreamLocalForwarding yesPermitTunnel yesUsePrivilegeSeparation no

De fato, correndo com ssh -ddd dentro do contêiner do docker e, em seguida, a conexão com a linha acima mostra primeiro:

debug3: /etc/ssh/sshd_config:91 setting GatewayPorts yesdebug3: /etc/ssh/sshd_config:92 setting AllowTcpForwarding yesdebug3: /etc/ssh/sshd_config:93 setting AllowStreamLocalForwarding yesdebug3: /etc/ssh/sshd_config:94 setting PermitTunnel yesdebug3: /etc/ssh/sshd_config:95 setting UsePrivilegeSeparation no

Seguido por:

debug1: server_input_global_request: rtype tcpip-forward want_reply 1debug1: server_input_global_request: tcpip-forward listen localhost port 2024debug1: server_input_global_request: rtype no-more-sessions@openssh.com want_reply 0

Portanto, claramente minha configuração está sendo definida corretamente, mas parece que o cliente ainda acha que o servidor não pode fazer o encaminhamento de porta. Como posso convencer o servidor openssh a realizar o encaminhamento remoto? O que poderia causar essa falha?

O cliente está em execução OpenSSH_7.2p2 Ubuntu-4ubuntu2.4, o servidor está em execução OpenSSH_6.7p1 Debian-5+deb8u4, a versão docker é 17.09.1-ce no Amazon Linux 2017.09.

Obrigado!

Você também pode tentar forçar o sshd a usar o ipv4. No seu exemplo, adicionando switch " -4 " da seguinte forma:

ssh -4 -R 2024:localhost:22 -N remote.server

seguir essas etapas me ajudou

  • instalar ssh no recipiente
  • habilite o serviço com /etc/init.d/ssh start
  • executar echo 'root:a-strong-password' | chpasswd para definir a senha para root
  • editar /etc / ssh / sshd_config e definir PermitRootLogin yes
  • entao /etc/init.d/ssh restart
  • entao ssh -fNTCR localhost:<YOUR-PORT>:localhost:22 remote-host isso vai para o fundo e você pode vê-lo via ps aux | grep ssh
  • então em host remoto podemos entrar nele ssh -p <YOUR-PORT> localhost
  • que pede o senha e você já criou

screenhost

enter image description here


Mais informações

  1. como fazer ssh-into-a-docker-container-remotamente-como-root-or-a-non-root-user