使用 dropbear 在 Docker 容器上的最小 SSH 服务器
此示例 Dockerfile 在 Alpine Linux 上运行 dropbear SSH 守护进程。它创建一个名为 myuser 的系统用户,并只允许该特定用户登录。
Dockerfile
FROM alpine:3.17
WORKDIR /app
ENV SSHUSER=myuser
# 要创建的 SSH 用户
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 sshtestDropbear 选项
dropbear 选项 -RFEwgsjk 是:
-R:按需创建主机密钥-F:不要 fork 到后台-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 中)复制到 Dropbear SSH 目录中的 authorized_keys 文件:
cat id_dropbear.pub | sudo tee -a ./dotssh/authorized_keys
install_authorized_key.sh
cat id_dropbear.pub | sudo tee -a ./dotssh/authorized_keyssudo(在 sudo tee 中)只是因为 dotssh 目录由另一个用户拥有才需要。
连接到容器
首先,你需要使用如何仅列出所有 Docker 容器的容器名称和 IP 地址中概述的方法找到容器的 IP 地址。在我们的示例中,此 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.4Check out similar posts by category:
Docker
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow