Переадресация SSH через Docker - привязка: адрес недоступен - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть контейнер Docker, который я хотел бы иметь возможность взаимодействовать с базой данных через туннель SSH.

Мой образ Docker построен на альпийском образе, и в Dockerfile я установил openssh-клиент и незащищенный порт 27017

Когда я раскручиваю свой образ Docker и пытаюсь перенаправить порты с помощью:

ssh -i /.ssh/ssh_key user@remote_ip -L 27017:localhost:27017 -Nf

Я получаю сообщение об ошибке:

bind: Address not available

Нет проблем с ssh на удаленный сервер, но я не могу переадресовать порты.

Спасибо

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вы можете получить «адрес привязки недоступен», если вы не укажете, какой интерфейс вы хотите использовать.По умолчанию он будет использовать все из них, включая IPV6.В моем случае это было обязательным для IPV4, но «адрес недоступен» на самом деле был для IPV6, например bind [::1]:2001: Address not available.Если вы используете опцию -4, это будет использовать только IPV4, а если вы получили ошибку типа IPV6, то это разрешит это для вас, как это было для меня в Arch Linux.

-4 Принудительно использует ssh только для адресов IPv4.


-D [bind_address:] порт

   Specifies a local “dynamic” application-level port forwarding.  This works by allocating a
    socket to listen to port on the local side, optionally bound to the specified
    bind_address.  Whenever a connection is made to this port, the connection is forwarded
    over the secure channel, and the application protocol is then used to determine where to
    connect to from the remote machine.  Currently the SOCKS4 and SOCKS5 protocols are sup‐
    ported, and ssh will act as a SOCKS server.  Only root can forward privileged ports.
    Dynamic port forwardings can also be specified in the configuration file.

   IPv6 addresses can be specified by enclosing the address in square brackets.  Only the
    superuser can forward privileged ports.  By default, the local port is bound in accordance
    with the GatewayPorts setting.  However, an explicit bind_address may be used to bind the
    connection to a specific address.  The bind_address of “localhost” indicates that the lis‐
    tening port be bound for local use only, while an empty address or ‘*’ indicates that the
    port should be available from all interfaces.
0 голосов
/ 19 ноября 2018

Мне удается создать ssh-туннель из docker-compose, используя эту точку входа:

ssh -4 -i /.ssh/ssh_key -NL *:27017:0.0.0.0:27017 user@remote_ip

и затем я смог использовать туннель ssh из другого контейнера, используя сеть, созданную с помощью docker-compose

docker run --network=tunnel_default image nmap -p 27027 service_name

tunnel_default - это имя сети.

image - это образ докера, на котором установлен nmap (он позволяет проверять открытые порты)

service_name - это имя i.отдал в сервис внутри докера-compose

...