Использование SSH в контейнере docker является плохой практикой, которую нужно избегать. В большинстве случае рекомендуется использовать команду docker exec, чтобы получить командную оболочку внутри контейнера. Но в некоторых случаях вам нужно подключиться к docker контейнеру через именно через интерактивную SSH сессию.
Подразумеваем, что на вашем Linux хосте уже установлен Docker.
В самом простом случае вы можете использовать команду docker run для запуска интерактивной сессии с docker контейнером. Запустите свой контейнер командой:
$ sudo docker run --rm -ti -p 50022:22 ubuntu
rm
– удалить контейнер после выходаt
– создать псевдо tty при запускеi
(interactive) – процесс стандартного ввода Linux будет открыт даже когда он не используется
После запуска этой команды вы попадете в свой контейнер Ubuntu. Теперь вам нужно обновить пакеты, установить OpenSSH сервер и любымый консольный редактор:
$ apt update && apt install openssh-server && apt install nano
Задайте пароль root, который вы будете использовать для SSH подключения:
$ passwd
Теперь отредактируйте конфигурационный файл openssh:
$ nano /etc/ssh/sshd_config
Раскоментиурйте строку PermitRootLogin = yes, чтобы разрешить SSH вход под root.
Сохраните файл и запустите сервер SSH:
# /etc/init.d/ssh start
Теперь вы можете с хоста docker подключиться к вашему контейнеру по SSH:
$ ssh -p 50022 root@127.0.0.1
Также вы можете создать готовый docker файл для сборки контейнера с установленным OpenSSH:
FROM ubuntu:latest RUN apt update && apt install openssh-server sudo -y RUN useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo -u 1000 test RUN echo 'test:testpassw123' | chpasswd RUN service ssh start EXPOSE 22 CMD ["/usr/sbin/sshd","-D"]
Соберите образ docker:
$ sudo docker build -t ssh_image_test .
Теперь запустите образ:
$ sudo docker run ssh_image_test -p 22:22
Чтобы получить IP адрес контейнера, выполните команду:
$ sudo docker inspect -f "{{ .NetworkSettings.IPAddress }}" ssh_image_test
Теперь вы можете подключиться к вашему контейнеру docker по ssh.
$ ssh test@ip_address