Docker 容器 SSH 连接宿主机问题解决指南
Docker 容器 SSH 连接宿主机问题解决指南
Bin LianDocker 容器 SSH 连接宿主机问题解决指南
问题场景
从 Docker 容器(openclaw)SSH 连接到宿主机及其他服务器时,遇到需要密码认证的问题。
一、问题汇总
问题 1:宿主机 authorized_keys 缺少公钥
| 项目 | 详情 |
|---|---|
| 现象 | SSH 连接时提示输入密码 |
| 原因 | 容器的公钥未添加到服务器的 authorized_keys |
| 解决 | 将容器公钥添加到宿主的 ~/.ssh/authorized_keys |
问题 2:未指定私钥文件
| 项目 | 详情 |
|---|---|
| 现象 | ssh user@host 直接提示密码 |
| 原因 | 未使用 -i 参数指定私钥文件 |
| 解决 | ssh -i ~/.ssh/私钥 user@host |
问题 3:私钥权限不正确
| 项目 | 详情 |
|---|---|
| 现象 | SSH 忽略私钥,回退到密码认证 |
| 原因 | 私钥文件权限过于开放(644),SSH 拒绝使用 |
| 正确权限 | 私钥必须是 600,目录必须是 700 |
问题 4:Docker 挂载后权限重置
| 项目 | 详情 |
|---|---|
| 现象 | 重启容器后 SSH 需要密码 |
| 原因 | 从镜像创建容器时,文件权限被重置 |
| 解决 | 确保宿主机挂载目录的权限正确 |
二、架构说明
1 | ┌─────────────────────────────────────────────────────────────────┐ |
关键点:
- 私钥保存在容器内(或挂载的宿主机目录)
- 公钥保存在目标服务器的
authorized_keys - 连接时必须用
-i指定私钥文件
三、docker-compose 配置
当前使用的挂载配置:
1 | volumes: |
这意味着:
- 容器内的
/home/node/.ssh实际指向宿主机目录 - 宿主机目录权限会直接影响容器内权限
四、完整解决步骤
步骤 1:生成密钥对(如果还没有)
1 | # 在容器内或宿主机上生成 |
步骤 2:将公钥添加到目标服务器
方法 A:使用 ssh-copy-id(需要密码)
1 | ssh-copy-id -p 端口 -i ~/.ssh/id_rsa_claw.pub 用户名@服务器IP |
方法 B:手动添加
1 | # 查看公钥 |
步骤 3:确保私钥权限正确
1 | # 宿主机上 |
步骤 4:使用私钥连接
1 | # 连接到宿主机(端口 52957) |
步骤 5:配置 SSH config(可选,永久生效)
在容器内创建 ~/.ssh/config:
1 | Host bsuper |
之后可以简化为:
1 | ssh bsuper |
五、调试命令
1 | # 1. 检查私钥权限 |
六、常见问题速查
| 问题 | 原因 | 解决 |
|---|---|---|
| 提示 password | 私钥权限不对 | chmod 600 私钥文件 |
| 提示 password | 未指定 -i | ssh -i 私钥 user@host |
| 提示 password | 公钥不在 authorized_keys | 添加公钥到服务器 |
| Permission denied (publickey) | 公钥不匹配 | 确认公钥是否正确添加 |
| Bad permissions | 私钥太开放 | 必须 600 权限 |
七、当前环境状态
已配置的密钥
| 密钥 | 位置 | 用途 |
|---|---|---|
| id_rsa_claw | ~/.ssh/id_rsa_claw | 连接宿主机和其他服务器 |
| id_rsa | ~/.ssh/id_rsa | 备用密钥 |
authorized_keys 包含的公钥
- 原有的 key (lianbin@wireless)
- id_rsa_claw.pub
- id_rsa.pub
测试结果
1 | # 容器 → 宿主机 |
八、预防措施
-
保持宿主机私钥权限正确
1
2chmod 600 /home/bsuperstation/workdir/openclaw/openclaw_ssh/.ssh/id_rsa*
chmod 700 /home/bsuperstation/workdir/openclaw/openclaw_ssh/.ssh -
重启容器后验证
- 容器重启后检查权限:
ls -la /home/node/.ssh/ - 如权限不对,手动修复或重新挂载
- 容器重启后检查权限:
-
使用 SSH config
- 配置默认使用的密钥,避免忘记
-i参数
- 配置默认使用的密钥,避免忘记
感谢你赐予我前进的力量|Thank you for your support!
赞赏者名单|List of supporters
因为你们的支持让我意识到写文章的价值🙏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Bin|Brain|Bin!
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果









