SSH密钥连接Docker容器遇Permission denied (publickey)问题求助
解决Docker容器SSH密钥认证失败的问题
1. 修正文件与目录权限
SSH对权限要求极为严格,这是密钥认证失败的最常见原因:
/root/.ssh目录权限必须设为700,禁止其他用户拥有读写权限authorized_keys文件权限必须设为600,同样不能放开权限
在容器内执行以下命令修改:
chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys
2. 补全sshd_config关键配置
除了你已设置的选项,必须确保以下配置生效:
PubkeyAuthentication yes:开启公钥认证(部分镜像默认注释或关闭)AuthorizedKeysFile .ssh/authorized_keys:确认公钥文件路径配置正确
修改后重启sshd服务(根据基础镜像不同,命令可能是service ssh restart或/etc/init.d/ssh restart)
3. 处理root用户密码状态
你开启密码登录后仍无法登录,可能是root用户未设置空密码。在容器内执行:
passwd -d root
清空root密码后重启sshd,先验证密码登录是否正常,再回到密钥认证排查。
4. 查看sshd日志定位错误
直接查看日志能精准找到问题:
- 查看容器内日志文件(如
/var/log/auth.log,不同镜像路径可能不同) - 或通过
docker logs <容器名>查看输出(若sshd为前台运行)
日志会明确提示是权限问题、密钥不匹配还是配置错误。
5. 校验公钥内容一致性
确保本地id_rsa.pub的内容与容器内/root/.ssh/authorized_keys完全一致,无换行错误、多余空格或字符缺失。可分别在本地和容器内执行cat命令对比内容。
6. 确认容器网络与IP
用docker inspect <容器名>查看容器实际IP,确保你连接的172.17.0.2是目标容器的正确地址,避免连错容器。
内容的提问来源于stack exchange,提问作者Corentin Salomon
相关产品推荐
相关产品推荐

