Sign inSign up

1009835447/alpine-ssh

By 1009835447

•Updated about 1 year ago

alpine ssh image

Image
Developer tools
0

126

1009835447/alpine-ssh repository overview

⁠如何使用

docker run -d --name -p 2222:22 alpine-ssh alpine-ssh:v25.10.14

默认用户名:root,默认密码:password

⁠Dockerfile优化:

  1. 减少镜像层数:合并多个 RUN 指令为单个指令,减少镜像层数
  2. 安全性增强:添加 --no-cache 参数避免保留 APK 缓存;明确清理 /tmp/* 临时目录;添加注释说明密码会保留在镜像中的安全风险
  3. 配置优化:移除重复的 sed 命令(原有两个修改配置的指令);移除多余的 ssh-keygen 命令(-A 参数已生成所有必要密钥);修正 sed 命令语法(原 sed -ie 会创建备份文件)
  4. 可维护性提升:添加清晰的注释说明每个步骤的作用;保持逻辑分组(安装、配置、清理);保留环境变量设置但添加可选注释
  5. 构建效率:合并指令减少中间层;在单个指令中完成所有配置操作;确保清理操作在最后执行
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"]

⁠Dockerfile进一步优化

改为多阶段构建镜像,使得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"]

⁠或者使用SSH秘钥

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"]

Tag summary

Content type

Image

Digest

sha256:73e0a27ea…

Size

7 MB

Last updated

about 1 year ago

docker pull 1009835447/alpine-ssh:v25.10.14