Почему я не могу просто ssh to docker container с моего хоста windows? - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь выполнить ssh с моего хоста Windows в Docker-контейнер Ubuntu. Я знаю, я могу использовать docker exec -it <container-name> /bin/bash для запуска, однако я хочу сделать обычный «ssh root@192.168.xx.xx» для входа в систему, потому что я хочу смоделировать вход в удаленный компьютер, а также он легко работает с моим pycharm.

Однако после того, как я установил "openssh-сервер" и запустил его, вход в систему с помощью ssh с моего хоста все еще невозможен.

:~$ ssh root@192.168.99.105

>>> The authenticity of host '192.168.99.105 (192.168.99.105)' can't be established.
ECDSA key fingerprint is SHA256:********
Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.99.105' (ECDSA) to the list of known hosts.
root@192.168.99.105's password: xxx
Permission denied, please try again.

Как я могу решить эту проблему? Я просто хочу просто SSH к этому контейнеру ...

Ответы [ 2 ]

3 голосов
/ 04 ноября 2019

Чтобы ответить на вопрос, заданный в заголовке:

Почему я не могу просто установить ssh в Docker-контейнер с моего хоста Windows?

Docker - это способ настройкиНастройки ядра Linux для процесса, чтобы ограничить то, что процесс может видеть (пространства имен) и сколько ресурсов может использовать этот процесс (cgroups). Таким образом, этот вопрос звучит так: «Почему я не могу войти в процесс по ssh», и ответ обычно - потому что этот процесс не является сервером sshd. Образ Ubuntu для Docker не является виртуальной машиной со всеми связанными с ней демонами, он даже не включает ядро. Вместо этого это минимальная файловая система с утилитами в среде Ubuntu (например, apt-get и bash).

С другой стороны, команда docker exec работает, потому что она выполняет вторую команду вта же изолированная среда, что и остальная часть контейнера. Так что если bash установлен в образе, то docker exec -it $container_id bash запустит интерактивную оболочку с теми же пространствами имен и группами, что и остальные процессы вашего контейнера.

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

Если вы все еще предпочитаете игнорировать совет или ваше приложение явносервер sshd, то вам нужно установить и настроить sshd как ваше работающее приложение внутри контейнера. документация от Docker о том, как это сделать, и множество примеров на Docker Hub от разных людей, если вы будете искать по sshd (обратите внимание, что я не считаю, что что-то из этого является официальным, поэтому я не рекомендуюлюбой из них).

2 голосов
/ 04 ноября 2019

Скорее всего, вам нужно настроить sshd на контейнере, чтобы разрешить root-доступ и / или включить аутентификацию по паролю.

sudo sed -i 's|[#]*PasswordAuthentication no|PasswordAuthentication yes|g' /etc/ssh/sshd_config
echo PermitRootLogin yes | sudo tee -a /etc/ssh/sshd_config
sudo service sshd restart

Одна или обе эти команды могут помочь, если образ вашего контейнера основан на Ubuntu / Debian. Лично у меня никогда не было необходимости вставлять ssh в контейнер докера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...