Intereting Posts
Относительно логического печатного рабочего каталога и физического печатного рабочего каталога Преобразование изображений и анимированных gifs в видео Imagemagick используется для генерации PPM в Linux, PPM не читаются где найти unhide-tcp для centos 6? Почему я не могу использовать аутентификацию открытого / закрытого ключа с помощью ssh в Arch Linux? solaris awk проблемы с датой и заявлениями Может ли параметр BS вызывать несогласованность данных с dd? Как читать строки из файла и комбинировать перед сопоставлением шаблона из другого файла? Команды командной строки терминала Scanimage работает, но Xsane или любой другой пользовательский интерфейс не Установите привязки в i3 для управления подсветкой клавиатуры Установка каталога samba изменяет все права доступа к файлам для пользователя, который его монтировал hexedit: изменить количество столбцов (байт на строку) Как установить мощность передачи Bluetooth? Как постоянно включить scl CentOS 6.4?

Я не могу успешно сгенерировать SSH-туннель внутри контейнера докеров

До сих пор у меня был домашний сервер, где я использую эту технику для доступа к ней за пределами дома.

Но теперь у меня есть другое требование, я хочу сделать это из контейнера докеров внутри моего домашнего сервера. Но если я попытаюсь подключиться к туннелю, я получаю сообщение об ошибке отказа.

Итак, чтобы настроить что-то подобное, у меня есть VPS онлайн и мой домашний сервер. Внутри моего домашнего сервера у меня работает контейнер. Я обмениваю открытые ключи между VPS и контейнером, правильно настраивая файл authorized_keys друг в друге. Я подтвердил, что я запускаю контейнер с -p 22:22 и что ни одна служба SSH не работает за пределами контейнера, который может использовать порт 22 хоста.

Затем я запускаю эту команду в контейнере:

$ ssh -vvvfN -oStrictHostKeyChecking=no -R 20007:localhost:22 myvps@myvpsdomain.com

Затем в моем VPS я печатаю это, и результат выполняется

 $ ssh -vvv container_user@localhost -p 20007 OpenSSH_7.2p2 Ubuntu-4ubuntu2.1, OpenSSL 1.0.2g 1 Mar 2016 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug2: resolving "localhost" port 20009 debug2: ssh_connect_direct: needpriv 0 debug1: Connecting to localhost [127.0.0.1] port 20009. debug1: Connection established. debug1: identity file /home/raspi/.ssh/id_rsa type 1 debug1: key_load_public: No such file or directory debug1: identity file /home/raspi/.ssh/id_rsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/raspi/.ssh/id_dsa type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/raspi/.ssh/id_dsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/raspi/.ssh/id_ecdsa type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/raspi/.ssh/id_ecdsa-cert type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/raspi/.ssh/id_ed25519 type -1 debug1: key_load_public: No such file or directory debug1: identity file /home/raspi/.ssh/id_ed25519-cert type -1 debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.1 ssh_exchange_identification: Connection closed by remote host 

Теперь, когда я проверяю журналы контейнеров, это то, что я вижу:

 debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0 debug1: remote forward success for: listen 20007, connect localhost:22 debug1: All remote forwarding requests processed debug1: client_input_channel_open: ctype forwarded-tcpip rchan 2 win 2097152 max 32768 debug1: client_request_forwarded_tcpip: listen localhost port 20007, originator 127.0.0.1 port 60364 debug2: fd 7 setting O_NONBLOCK debug2: fd 7 setting TCP_NODELAY debug1: connect_next: host localhost ([::1]:22) in progress, fd=7 debug3: fd 7 is O_NONBLOCK debug3: fd 7 is O_NONBLOCK debug1: channel 0: new [127.0.0.1] debug1: confirm forwarded-tcpip debug3: channel 0: waiting for connection debug1: channel 0: connection failed: Connection refused debug2: fd 8 setting O_NONBLOCK debug2: fd 8 setting TCP_NODELAY debug1: connect_next: host localhost ([127.0.0.1]:22) in progress, fd=8 debug3: channel 0: waiting for connection debug1: channel 0: connection failed: Connection refused connect_to localhost port 22: failed. debug2: channel 0: zombie debug2: channel 0: garbage collecting debug1: channel 0: free: 127.0.0.1, nchannels 1 debug3: channel 0: status: The following connections are open: 

Помните, что все эти шаги работают отлично, когда вы работаете за пределами контейнера, но каким-то образом внутри контейнера VPS не может выполнить соединение с помощью туннеля …

EDIT : Вот код контейнера, делающего туннель на удаленном сервере:

 FROM ubuntu:16.04 RUN apt-get update && apt-get install -y ssh htop nano autossh RUN ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N ''; \ COPY authorized_keys $HOME/.ssh/ echo '=======SAVE THIS KEY TO ~/.ssh/authorized_keys in the Cloud Server======='; \ cat $HOME/.ssh/id_rsa.pub; \ echo '========================================================================='; RUN sleep 20 # Give me time to put the key in the cloud server RUN echo "/usr/bin/ssh -vvvfN -oStrictHostKeyChecking=no -R 20009:localhost:22 myvps@myvpsdomain.com" > $HOME/connect.sh; \ chmod 777 $HOME/connect.sh EXPOSE 22 EXPOSE 20009 CMD ["sh", "-c", "$HOME/connect.sh"] 

Этот файл Dockerfile:

  • генерирует пару ключей,
  • сохраняет ключ pub на удаленном сервере,
  • ждет 20 секунд для меня, чтобы поставить эту пару ключей на удаленный сервер authorized_keys,
  • и затем открывает туннель.

Это не работает, как вы можете видеть сообщения об ошибках. Но если я сделаю эти точные шаги на физической машине, а не в контейнере, она просто отлично работает …