Как поднять SSH-сервер на Docker
Задача:
Поднять пять SSH-серверов, для тестирования сессий на LoadMaster-е.
:
1. Создаем папку, для нашего проекта с именем ИМЯПАПКИ (имя произвольное).
2. Идем в папку ИМЯПАПКИ , создаем в ней файл, с именем Dockerfile, и записываем в него следующую информацию:
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
#Нужно придумать пароль к учетной записи root и вписать его вместо ТВОЙПАРОЛЬ
RUN echo 'root:ТВОЙПАРОЛЬ' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# Эта строчка необходима для обхода бага, с удалением пользователя, после авторизации на сервере.
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
ENV NOTVISIBLE "in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile
#Говорим Docker, что служба SSH работает через 22-й порт, внутри контейнера.
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
3. Запускаем сборку образа, с именем ИМЯОБРАЗА(имя придумываем любое и указываем после опции -t), а дирректорию указываем текущую: . (или, полный путь до файла Dockerfile):
4. Теперь, на базе собранного образа(ИМЯОБРАЗА), можно запускать столько SSH-серверов(контейнеров), сколько нужно. Запускаем SSH-сервер в фоновом режиме(-d), подключаем его к случайно выбранному порту (-P), с произвольным именем ИМЯSSHСЕРВЕРА (--name):
5. Смотрим, к какому порту подключен SSH-сервис, в контейнере(ИМЯSSHСЕРВЕРА), работающий по 22-ому порту (EXPOSE 22):
0.0.0.0:32768
6. Аналогичным способом, повторяя 4-5 шаг, создаем остальные сервера, меняя только ИМЯSSHСЕРВЕРА. Вывод выглядит, приблизительно, так: