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

通过SSH连接远程Docker时出现Permission denied报错如何解决

排查解决步骤

1. 校验本地ssh二进制文件权限

报错核心是Docker客户端无权限执行本地/usr/bin/ssh,先检查权限配置:
执行命令查看权限:

ls -l /usr/bin/ssh

正常输出应为-rwxr-xr-x 1 root root ... /usr/bin/ssh,如果权限不匹配执行修复:

sudo chmod 755 /usr/bin/ssh
sudo chown root:root /usr/bin/ssh

2. 排查容器化安装的Docker限制

如果你的Docker是通过snap/flatpak这类沙箱工具安装的,默认会限制Docker访问ssh程序和密钥目录:

  • 执行命令判断是否为snap安装:
snap list | grep docker

如果有匹配输出,执行权限放开命令后重试:

sudo snap connect docker:ssh-keys :ssh-keys
sudo snap connect docker:network-observe :network-observe

如果是flatpak安装,建议更换为官方源的apt/dnf/rpm安装包,避免沙箱权限问题。

3. 校验Docker执行身份

不要用sudo前缀执行Docker远程连接命令,sudo会切换到root用户,默认root用户没有配置对应ssh免密权限、也读取不到当前普通用户的ssh-agent缓存。如果必须使用sudo,要保留当前用户的环境变量:

sudo -E docker -H ssh://host_user@host_ip:host_port ps

4. 验证远程侧基础链路

先手动执行ssh远程执行docker命令,确认远程侧配置无问题:

ssh host_user@host_ip -p host_port docker ps

如果该命令执行失败,需要重新检查远程用户的docker组配置是否生效,执行远程主机的groups命令确认输出包含docker组,未生效的话需要重新登录远程主机或者重启远程sshd服务。

5. 排查系统安全模块拦截

  • 对于CentOS/RHEL等开启SELinux的系统,临时关闭SELinux测试:
sudo setenforce 0

如果测试可正常执行,说明SELinux规则拦截了Docker调用ssh的行为,可通过audit2allow工具生成允许规则后恢复SELinux启用状态。

  • 对于Ubuntu等开启AppArmor的系统,查看拦截日志:
dmesg | grep -i apparmor | grep docker

如果存在deny相关的日志,调整AppArmor的Docker配置文件放开ssh执行权限即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:24:02