🔐 Как установить сервер OpenSSH на Alpine Linux (включая Docker)

Мануал

В этом кратком руководстве объясняется, как установить и настроить сервер и клиент 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 в качестве базового образа.

 

 

Добавить комментарий