Этот пример Dockerfile запускает SSH-демон dropbear на Alpine Linux. Он создаёт системного пользователя с именем myuser и разрешает вход только для этого конкретного пользователя.
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 -t sshtest .Запуск контейнера
Вы можете запустить его так — не забудьте смонтировать /etc/dropbear в том или локальную директорию как для сохранения файлов ключей хоста, так и для хранения файлов авторизованных ключей:
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 ""
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
cat id_dropbear.pub | sudo tee -a ./dotssh/authorized_keyssudo (в sudo tee) требуется только потому, что директория dotssh принадлежит другому пользователю.
Подключение к контейнеру
Сначала вам нужно найти IP-адрес контейнера, используя метод, описанный в Как вывести только имена контейнеров и IP-адрес(а) всех Docker-контейнеров. В нашем примере этот IP-адрес — 10.254.1.4. Затем вы можете подключиться к контейнеру с использованием публичного ключа:
ssh -i id_dropbear myuser@10.254.1.4
ssh -i id_dropbear myuser@10.254.1.4