You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

关键修改说明

  1. 修正密钥复制错误:把私钥key换成公钥key.pub,这是密钥登录生效的前提
  2. 严格权限设置:
    • .ssh目录必须设为700(仅root可读可写可执行)
    • authorized_keys必须设为600,且所有者为root:root,SSH会拒绝权限过于宽松的密钥文件
  3. 优化SSH配置:
    • 明确将PasswordAuthentication设为no,彻底禁用密码登录
    • PermitRootLogin prohibit-password比yes更安全,它允许root通过密钥登录但禁止密码登录
  4. 精简镜像:移除openrc等无用依赖,用--no-cache减少镜像体积

验证步骤

  1. 确保当前目录下有key(私钥)和key.pub(公钥),如果没有重新生成:
    ssh-keygen -f key
    
  2. 构建镜像:
    sudo docker build -t alpine-ssh .
    
  3. 启动容器:
    sudo docker run -d --name alpine-container alpine-ssh
    
  4. 获取容器IP:
    sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' alpine-container
    
  5. 使用私钥免密登录:
    ssh -i key root@<容器IP>
    

内容的提问来源于stack exchange,提问作者user22892732

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 19:40:32