В этом кратком руководстве объясняется, как установить и настроить сервер и клиент OpenSSH (SSHD) в системе Alpine Linux.
Кроме того, вы узнаете, как создать контейнер Docker Linux с сервером sshd на основе образа Alpine Linux.
Установка сервера OpenSSH в Alpine Linux
Процедура установки ssh-сервера выглядит следующим образом:
Найдите пакет ssh, запустите:
apk search openssh
Установите сервер и клиент OpenSSH с помощью команды apk:
apk add openssh
Включите службу sshd во время загрузки системы:
rc-update add sshd
Вывод:
* service sshd added to runlevel default
Запустите службу SSHD в Alpine Linux с помощью команды service:
service sshd start
Вывод:
* Caching service dependencies ... [ ok ] ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519 * Starting sshd ... [ ok ]
Отредактируйте файл /etc/ssh/sshd_config с целью настройки.
По умолчанию, sshd в Alpine Linux будет использовать TCP порт 22.
Поэтому вам нужно настроить брандмауэр Awall на Alpine Linux, чтобы открыть TCP порт # 22.
Теперь пользователи могут входить в систему, используя свои пароли и ssh-ключи.
Установка OpenSSH в Docker-контейнере Alpine Linux
Вам нужно только добавить следующее в ваш Dockerfile:
RUN apk add –no-cache openssh
Но вот как настроить ssh-сервер в контейнере docker с помощью Alpine Linux.
Создайте новый Dockerfile:
FROM alpine:latest LABEL maintainer="Vivek Gite webmater@cyberciti.biz" RUN apk add --update --no-cache openssh RUN echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config RUN adduser -h /home/vivek -s /bin/sh -D vivek RUN echo -n 'vivek:some_password_here' | chpasswd ENTRYPOINT ["/entrypoint.sh"] EXPOSE 22 COPY entrypoint.sh /
Создайте shell скрипт с именем entrypoint.sh следующим образом:
#!/bin/sh ssh-keygen -A exec /usr/sbin/sshd -D -e "$@"
Установите права на выполнение файла с помощью команды chmod:
chmod +x -v entrypoint.sh\
Затем соберите его следующим образом:
docker build -t alpine-sshd .
Sending build context to Docker daemon 30.21kB Step 1/9 : FROM alpine:latest latest: Pulling from library/alpine a0d0a0d46f8b: Pull complete Digest: sha256:e1c082e3d3c45cccac829840a25941e679c25d438cc8412c2fa221cf1a824e6a Status: Downloaded newer image for alpine:latest ---> 14119a10abf4 Step 2/9 : LABEL maintainer="Vivek Gite webmater@cyberciti.biz" ---> Running in 3bd5df80a039 Removing intermediate container 3bd5df80a039 ---> ad5cae21b2b8 Step 3/9 : RUN apk add --update --no-cache openssh ---> Running in 2af9aebbe183 fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/main/x86_64/APKINDEX.tar.gz fetch https://dl-cdn.alpinelinux.org/alpine/v3.14/community/x86_64/APKINDEX.tar.gz (1/10) Installing openssh-keygen (8.6_p1-r3) (2/10) Installing ncurses-terminfo-base (6.2_p20210612-r0) (3/10) Installing ncurses-libs (6.2_p20210612-r0) (4/10) Installing libedit (20210216.3.1-r0) (5/10) Installing openssh-client-common (8.6_p1-r3) (6/10) Installing openssh-client-default (8.6_p1-r3) (7/10) Installing openssh-sftp-server (8.6_p1-r3) (8/10) Installing openssh-server-common (8.6_p1-r3) (9/10) Installing openssh-server (8.6_p1-r3) (10/10) Installing openssh (8.6_p1-r3) Executing busybox-1.33.1-r3.trigger OK: 12 MiB in 24 packages Removing intermediate container 2af9aebbe183 ---> 810ed83e5a93 Step 4/9 : RUN echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config ---> Running in c5288a3af1a0 Removing intermediate container c5288a3af1a0 ---> e2f05f1da7cd Step 5/9 : RUN adduser -h /home/vivek -s /bin/sh -D vivek ---> Running in 8ae29c917926 Removing intermediate container 8ae29c917926 ---> e258460dfa67 Step 6/9 : RUN echo -n 'vivek:vivek' | chpasswd ---> Running in 1df5fef24dcf chpasswd: password for 'vivek' changed Removing intermediate container 1df5fef24dcf ---> 1c903eaa551f Step 7/9 : ENTRYPOINT ["/entrypoint.sh"] ---> Running in 86af67a76db7 Removing intermediate container 86af67a76db7 ---> 185a32d0bc09 Step 8/9 : EXPOSE 22 ---> Running in 203f6f8bcaa2 Removing intermediate container 203f6f8bcaa2 ---> 9f3f5a20d44c Step 9/9 : COPY entrypoint.sh / ---> c1a0fe4e6375 Successfully built c1a0fe4e6375 Successfully tagged alpine-sshd:latest
Запустите его:
docker run --name sshd_app -d -p 22:22 alpine-sshd:latest
03a3661d04d6aa266690c3c44ab3aaa23ea2258ebe18d5efd07f8553710c9da2
Проверьте:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 03a3661d04d6 alpine-sshd:latest "/entrypoint.sh" 16 seconds ago Up 15 seconds 0.0.0.0:22->22/tcp, :::22->22/tcp sshd_app
Обратите внимание, что приведенный выше контейнер является первичным для демонстрационных целей, и я не устанавливал том для персистентных данных.
Более подробную информацию можно найти тут:
🐳 Где хранятся образы, контейнеры и тома Docker в хост-системе Linux?
Заключение
Вы узнали, как установить OpenSSH на сервере Alpine Linux или собрать Docker контейнер с сервером OpenSSH, используя Alpine Linux в качестве базового образа.
а как подключиться этому контейнеру?