连接Docker容器暴露的SSH端口时提示权限被拒绝如何解决
问题解答
1 故障原因排查
你当前的权限报错不是SSH密钥问题,核心原因有两个:
- 容器的root账户完全独立于宿主机,输入宿主机的root密码本身就是错误的,绝大部分自定义镜像默认会锁死root密码,不允许空密码/未知密码登录
- 你使用的SSH命令格式错误,macOS原生ssh客户端不支持
ip:端口的写法,指定端口需要加-p参数,正确的基础命令为ssh root@127.0.0.1 -p 1312
2 密码登录解决方案
如果要使用密码登录,按以下步骤操作:
- 以交互模式进入运行中的容器:
docker exec -it cpp_dep bash - 手动设置root账户密码,执行命令后输入两次你自定义的密码即可:
passwd root - 确认容器SSH配置允许root密码登录,编辑
/etc/ssh/sshd_config文件,确保存在以下配置:
PermitRootLogin yes PasswordAuthentication yes
- 重启容器内的SSH服务生效:
service ssh restart
之后使用你刚才设置的root密码即可完成SSH登录,CLion中配置远程工具链时直接使用该密码即可。
3 免密码登录配置方案
推荐使用SSH密钥方式实现免密登录,安全性更高,操作步骤如下:
- 如果你本地macOS没有生成过SSH密钥,先执行本地命令生成密钥,一路回车使用默认配置即可:
ssh-keygen -t ed25519 - 进入容器创建SSH配置目录并设置权限:
mkdir -p /root/.ssh chmod 700 /root/.ssh
- 本地mac终端执行命令,将公钥写入容器的授权文件:
cat ~/.ssh/id_ed25519.pub | ssh root@127.0.0.1 -p 1312 'cat >> /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys'
配置完成后后续SSH连接无需输入密码,CLion中选择OpenSSH密钥认证即可自动读取本地配置完成连接。
4 镜像优化建议
你可以将上述配置写入cpp_dep镜像的Dockerfile中,避免每次启动容器都重复配置,示例配置片段如下:
# 安装SSH服务(基于Debian/Ubuntu系镜像,其他发行版对应修改包管理命令即可) RUN apt update && apt install -y openssh-server # 设置root密码(自行替换为你需要的密码) RUN echo 'root:123456' | chpasswd # 配置SSH允许root登录 RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \ && sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config # 启动SSH服务 CMD ["/usr/sbin/sshd", "-D"]
内容的提问来源于stack exchange,提问作者enchanted butterfly
相关产品推荐
相关产品推荐

