自读研以来一直使用 VSCode 的 remote SSH 功能连接到实验室的服务器或其他服务器上进行远程工作,时常使用 GitHub Copilot 来提高效率。然而近日发现,在使用 remote SSH 远程工作时,GitHub Copilot 的自动补全和对话功能都无法正常工作。尝试若干方法后得以解决,写下这篇博客作为记录和参考。

问题发现与报错信息

最近某次需要使用对话功能时,Copilot 显示请求失败:


报错信息

在 VSCode 的输出面板中查看 GitHub Copilot 的日志,发现有如下错误信息:

2025-06-01 11:22:13.198 [info] activationBlocker from 'languageModelAccess' took for 8016ms
2025-06-01 11:22:29.969 [error] TypeError: fetch failed
    at node:internal/deps/undici/undici:13502:13
    at processTicksAndRejections 

与此同时,在本地 VSCode 中使用 Copilot 一切正常,说明问题大概是出在 remote SSH 的配置或网络连接上。

解决方法

经过查询和尝试,最终的解决方法是在 VSCode 中打开 settings.json 文件,添加以下内容:

    "remote.extensionKind": {
        "GitHub.copilot": ["ui"],
        "GitHub.copilot-chat": ["ui"],
    },

添加后的 settings.json 应如:

{
    // 其他设置...
    "remote.extensionKind": {
        "GitHub.copilot": ["ui"],
        "GitHub.copilot-chat": ["ui"]
    }
}

重新启动远程连接,GitHub Copilot 的自动补全和对话功能就可以正常使用了。

原理探究

从问题描述中可推测,Copilot 可以在本地 VSCode 中正常工作,但在 remote SSH 环境下无法正常使用。这可能是因为 Copilot 在远程环境中需要访问一些网络资源或服务,而这些资源在远程服务器上不可用或配置不当。

根据 VSCode 官方文档 ,extensionKind 用于指定扩展的运行环境。将 GitHub.copilotGitHub.copilot-chat 设置为 ["ui"],表示这些扩展只在 UI 线程中运行,而不是在远程服务器上运行。这可以避免一些网络请求和资源访问的问题,从而使 Copilot 在 remote SSH 环境下正常工作。

参考资料