Минимальный SSH-сервер в Docker-контейнере с использованием dropbear

Этот пример Dockerfile запускает SSH-демон dropbear на Alpine Linux. Он создаёт системного пользователя с именем myuser и разрешает вход только для этого конкретного пользователя.

Dockerfile
FROM alpine:3.17
WORKDIR /app
ENV SSHUSER=myuser
# The SSH user to create
RUN apk --no-cache add dropbear &&\
    mkdir -p /home/$SSHUSER/.ssh &&\
    adduser -s /bin/sh -D $SSHUSER --home /home/$SSHUSER &&\
    chown -R $SSHUSER:$SSHUSER /home/$SSHUSER

CMD ["/bin/sh", "-c", "/usr/sbin/dropbear -RFEwgsjk -G ${SSHUSER} -p 22"]

Измените имя пользователя по своему усмотрению.

Соберите так:

docker build -t sshtest .

docker_build_sshtest.sh
docker build -t sshtest .

Запуск контейнера

Вы можете запустить его так — не забудьте смонтировать /etc/dropbear в том или локальную директорию как для сохранения файлов ключей хоста, так и для хранения файлов авторизованных ключей:

docker_run_sshtest.sh
docker run -v $(pwd)/dropbear:/etc/dropbear -v $(pwd)/dotssh:/home/myuser/.ssh -it sshtest

Опции Dropbear

Опции dropbear -RFEwgsjk:

  • -R: Создавать ключи хоста по мере необходимости
  • -F: Не форкаться в фон
  • -E: Логировать в stderr, а не в syslog
  • -w: Запретить вход root
  • -g: Отключить вход по паролю для root
  • -s: Отключить вход по паролю
  • -j: Отключить локальную переадресацию портов
  • -k: Отключить удалённую переадресацию портов

Настройка аутентификации по публичному ключу

Сначала сгенерируйте пару ключей с помощью

ssh-keygen -t ed25519 -f id_dropbear -N ""

generate_dropbear_key.sh
ssh-keygen -t ed25519 -f id_dropbear -N ""

Мы предполагаем, что вы смонтировали домашнюю .ssh-директорию пользователя в ./dotssh (как в нашем примере, см. Запуск контейнера выше). Затем вы можете скопировать публичный ключ, сгенерированный ssh-keygen — который сохраняется в id_dropbear.pub — в файл authorized_keys в директории Dropbear SSH:

cat id_dropbear.pub | sudo tee -a ./dotssh/authorized_keys

install_authorized_key.sh
cat id_dropbear.pub | sudo tee -a ./dotssh/authorized_keys

sudosudo tee) требуется только потому, что директория dotssh принадлежит другому пользователю.

Подключение к контейнеру

Сначала вам нужно найти IP-адрес контейнера, используя метод, описанный в Как вывести только имена контейнеров и IP-адрес(а) всех Docker-контейнеров. В нашем примере этот IP-адрес — 10.254.1.4. Затем вы можете подключиться к контейнеру с использованием публичного ключа:

ssh -i id_dropbear myuser@10.254.1.4

ssh_to_container_example.sh
ssh -i id_dropbear myuser@10.254.1.4

Check out similar posts by category: Docker