如何在 Alpine Linux 上安装 OpenSSH 服务器(包括 Docker)
本快速教程介绍了如何在 Alpine Linux 系统上安装和设置 OpenSSH (SSHD) 服务器和客户端。此外,您还将学习如何基于 Alpine Linux 映像构建运行 sshd 服务器的 Docker Linux 容器。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 是的 |
要求 | Alpine Linux |
预计阅读时间 | 2 分钟 |
在 Alpine Linux 上安装 OpenSSH 服务器
设置 ssh 服务器的过程如下:
- 搜索 ssh 包,运行:
apk search openssh - 使用apk 命令安装 OpenSSH 服务器和客户端:
apk add openssh - 在启动时启用 sshd 服务:
rc-update add sshd
输出:* service sshd added to runlevel default
- 立即使用服务命令在 Alpine Linux 上启动 SSHD 服务:
service sshd start
输出:* Caching service dependencies ... [ ok ] ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519 * Starting sshd ... [ ok ]
- 编辑/etc/ssh/sshd_config以实现定制目的。
- 默认情况下,Alpine Linux 上的 sshd 将使用 TCP 端口 22。因此,您需要配置Alpine Linux 上的 Awall 防火墙以打开 TCP 端口#22。
- 用户现在可以使用他们的密码和ssh 密钥登录。例如:
ssh vivek@alpine-server-ip-here
在 Alpine Linux Docker 容器上安装 OpenSSH
您只需将以下内容添加到您的 Dockerfile 中:
RUN apk add --no-cache openssh
但是,这里是使用 Alpine Linux 在 Docker 容器内设置 ssh 服务器的方法。创建一个新的 Dockerfile:
FROM alpine:latest LABEL maintainer="Vivek Gite webmater@example.com" 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 /
创建一个名为entrypoint.sh的新shell脚本,如下所示:
#!/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@example.com" ---> 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
现在您可以通过 ssh 进入它:
ssh vivek@docker-sever-ip-here
请注意,以上是用于演示目的的主要容器,我尚未设置用于持久性数据的卷。有关更多信息,请参阅 docker卷。
总结
您了解了如何在 Alpine Linux 服务器上安装 OpenSSH,或者使用 Alpine Linux 作为基础镜像构建带有 OpenSSH 服务器的 Docker 容器。使用 man 命令查看以下手册页:
man docker
man docker-run
man docker-build
man docker-volume
本篇是Linux/Unix OpenSSH 教程系列中的第 7 篇(共23 篇)。继续阅读本系列的其余部分:
- 20 个 OpenSSH 服务器最佳安全实践
- 如何在 Linux / Unix 系统上设置 SSH 密钥
- Linux / Unix 用户的 OpenSSH 配置文件示例
- 审计 Linux/Unix 上的 SSH 服务器和客户端配置
- 如何在 FreeBSD 上安装和升级 OpenSSH 服务器
- Ubuntu Linux 安装 OpenSSH 服务器
- 在 Alpine Linux 上安装 OpenSSH 服务器(包括 Docker)
- Debian Linux 安装 OpenSSH SSHD 服务器
- 配置 OpenSSH 以监听 IPv6 地址
- OpenSSH 服务器连接在几分钟不活动后断开
- 在 OpenSSH 身份验证之前显示横幅/消息
- 强制 OpenSSH(sshd)仅监听选定的多个 IP 地址
- OpenSSH 使用 ssh-keygen 命令更改密码
- 重复使用 SSH 连接以通过多路复用加速远程登录过程
- 重新启动 SSHD 服务器之前检查语法错误
- 更改 Linux 或 Unix 服务器上的 ssh 端口
- OpenSSH 拒绝或限制用户和组的访问
- Linux OpenSSH 服务器拒绝 root 用户访问/登录
- 在 Linux 上禁用 ssh 密码登录以提高安全性
- SSH ProxyCommand 示例:通过一台主机到达服务器
- OpenSSH 多路复用器可加速 OpenSSH 连接
- 在远程 Linux / UNIX 服务器中安装 / 附加 SSH 密钥 Authorized_keys
- 使用 ssh-copy-id 与监听不同端口的 OpenSSH 服务器配合使用