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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:15:40