使用Docker Context时遭遇‘Host key verification failed’错误求助
解决Docker Context SSH连接报错Host key verification failed的问题
核心问题分析
你遇到的问题根源在于:Docker Context构造SSH连接命令时,没有读取本地~/.ssh/config的配置规则,导致StrictHostKeyChecking仍为默认的yes,触发主机密钥验证;同时Docker调用的SSH命令未加载你指定的自定义密钥,最终连接失败。而直接执行ssh user@myhost时,SSH客户端会自动读取~/.ssh/config的规则,因此能正常连接。
具体解决方案
1. 使用SSH Config的Host别名创建Docker Context
修改上下文创建命令,直接复用~/.ssh/config中定义的Host别名(即myhost),而非user@myhost:
docker context create myhostcontext --docker "host=ssh://myhost"
这样Docker会直接调用ssh myhost命令,完全继承~/.ssh/config里的所有配置(包括StrictHostKeyChecking=no、IdentityFile等),避免手动拼接SSH参数的问题。
2. 手动为现有Docker Context指定SSH选项
如果不想重新创建上下文,可直接更新现有上下文的SSH参数,强制指定密钥和主机验证规则:
docker context update myhostcontext --docker "host=ssh://user@myhost?ssh-option=StrictHostKeyChecking=no&ssh-option=IdentityFile=~/.ssh/myhost"
这种方式会让Docker在调用SSH时直接带上指定选项,绕过默认的配置读取逻辑。
3. 确认远程用户的Docker权限(可选但关键)
即使SSH连接成功,远程用户需具备访问Docker Daemon的权限,否则后续执行docker ps仍会报错。在远程主机上执行:
sudo usermod -aG docker user
执行后让远程用户重新登录,或重启远程主机,确保权限生效。
4. CI/CD环境适配(无交互场景)
针对CI/CD的无交互需求,额外做以下配置:
- 确保私钥权限为
600(SSH会拒绝权限过宽的私钥):chmod 600 ~/.ssh/myhost - 提前将远程主机的Host Key写入
known_hosts(比禁用验证更安全):ssh-keyscan myhost >> ~/.ssh/known_hosts - 避免依赖
ssh-agent,直接通过IdentityFile指定密钥路径。
验证解决效果
修改完成后,重新切换上下文并测试:
docker context use myhostcontext docker ps
内容的提问来源于stack exchange,提问作者lazyb0ne
相关产品推荐
相关产品推荐

