docker run -d --name -p 2222:22 alpine-ssh alpine-ssh:v25.10.14
默认用户名:root,默认密码:password
RUN 指令为单个指令,减少镜像层数--no-cache 参数避免保留 APK 缓存;明确清理 /tmp/* 临时目录;添加注释说明密码会保留在镜像中的安全风险sed 命令(原有两个修改配置的指令);移除多余的 ssh-keygen 命令(-A 参数已生成所有必要密钥);修正 sed 命令语法(原 sed -ie 会创建备份文件)FROM alpine:3.22
# 构建参数:设置 root 密码(不推荐,docker history会显示出来)
ARG PASSWORD=password
# 安装必要软件并配置 SSH
RUN apk add --no-cache openssh bash && \
# 修改 SSH 配置
sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config && \
sed -i 's/#Port 22/Port 22/' /etc/ssh/sshd_config && \
# 设置 root 密码(构建后密码会保留在镜像中)
echo "root:${PASSWORD}" | chpasswd && \
# 生成 SSH 主机密钥
ssh-keygen -A && \
# 升级软件包
apk upgrade --no-cache && \
# 清理临时文件和缓存
rm -rf /var/cache/apk/* /tmp/*
# 暴露 SSH 端口
EXPOSE 22
# 启动 SSH 服务
CMD ["/usr/sbin/sshd", "-D"]
改为多阶段构建镜像,使得ssh密码无法通过docker history命令查看。仅适合自用,不适合作为通用镜像。
# 第一阶段:构建包含密码处理的临时镜像
FROM alpine:3.22 as builder
# 构建参数:设置 root 密码
ARG PASSWORD=password
RUN echo "root:${PASSWORD}" | chpasswd
# 第二阶段:创建最终镜像
FROM alpine:3.22
# 从构建阶段复制必要的文件
COPY --from=builder /etc/passwd /etc/shadow /etc/
# 安装运行时需要的软件(不包含密码处理)
RUN apk add --no-cache openssh bash && \
apk upgrade --no-cache && \
# 修改 SSH 配置
sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config && \
sed -i 's/#Port 22/Port 22/' /etc/ssh/sshd_config && \
# 生成 SSH 主机密钥
ssh-keygen -A && \
# 清理临时文件和缓存
rm -rf /var/cache/apk/* /tmp/*
# 暴露 SSH 端口
EXPOSE 22
# 启动 SSH 服务
CMD ["/usr/sbin/sshd", "-D"]
FROM alpine:3.22
RUN apk add --no-cache openssh bash && \
mkdir -p /root/.ssh && \
ssh-keygen -A && \
sed -i 's/#PermitRootLogin.*/PermitRootLogin without-password/' /etc/ssh/sshd_config
COPY id_rsa.pub /root/.ssh/authorized_keys
RUN chmod 700 /root/.ssh && chmod 600 /root/.ssh/authorized_keys
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
Content type
Image
Digest
sha256:73e0a27ea…
Size
7 MB
Last updated
about 1 year ago
docker pull 1009835447/alpine-ssh:v25.10.14