Alpine Docker容器SSH服务RSA密钥登录失败求助
解决Alpine Docker容器SSH免密登录失败的问题
核心问题排查
你的配置里有几个关键错误,直接导致密钥登录失效:
- 复制了私钥而非公钥:你用
ssh-keygen -f key生成的key是私钥,而authorized_keys需要存放的是公钥(key.pub) - 权限不符合SSH要求:
.ssh目录和authorized_keys的权限没有设置正确,SSH对这两个文件/目录的权限有严格限制,权限不对会直接跳过密钥验证 - 冗余依赖与无效配置:
openrc在Docker容器中无用,且sshd_config的修改没有彻底禁用密码登录
修改后的Dockerfile
FROM alpine:latest # 仅安装openssh包,已包含server和keygen组件 RUN apk update && apk add --no-cache openssh # 生成SSH主机所需的各类密钥 RUN ssh-keygen -A # 创建.ssh目录并设置严格权限,再复制公钥到authorized_keys RUN mkdir -p /root/.ssh && chmod 700 /root/.ssh COPY key.pub /root/.ssh/authorized_keys RUN chmod 600 /root/.ssh/authorized_keys && chown root:root /root/.ssh/authorized_keys # 调整sshd配置:禁用密码登录,允许root通过密钥登录 RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config EXPOSE 22 ENTRYPOINT ["/usr/sbin/sshd", "-D"]
关键修改说明
- 修正密钥复制错误:把私钥
key换成公钥key.pub,这是密钥登录生效的前提 - 严格权限设置:
.ssh目录必须设为700(仅root可读可写可执行)authorized_keys必须设为600,且所有者为root:root,SSH会拒绝权限过于宽松的密钥文件
- 优化SSH配置:
- 明确将
PasswordAuthentication设为no,彻底禁用密码登录 PermitRootLogin prohibit-password比yes更安全,它允许root通过密钥登录但禁止密码登录
- 明确将
- 精简镜像:移除
openrc等无用依赖,用--no-cache减少镜像体积
验证步骤
- 确保当前目录下有
key(私钥)和key.pub(公钥),如果没有重新生成:ssh-keygen -f key - 构建镜像:
sudo docker build -t alpine-ssh . - 启动容器:
sudo docker run -d --name alpine-container alpine-ssh - 获取容器IP:
sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' alpine-container - 使用私钥免密登录:
ssh -i key root@<容器IP>
内容的提问来源于stack exchange,提问作者user22892732
相关产品推荐
相关产品推荐

