VSCode Remote-SSH 是否读取 ~/.ssh/config 取决于系统 ssh 命令行为;常见因启动方式导致 $HOME 错误或 shell 配置未加载,需通过终端启动 code 或检查内置终端环境变量与 ssh -G 输出一致性。

VSCode 远程连接不读 ~/.ssh/config?先确认 SSH 客户端是否生效
VSCode 的 Remote-SSH 插件底层调用的是系统 ssh 命令,不是自己实现的 SSH 协议。所以它是否读取 ~/.ssh/config,完全取决于你本地终端执行 ssh 时的行为。
常见错误现象:Failed to fetch remote environment 或连接时提示 Permission denied (publickey),但你在终端里 ssh myhost 能连上——大概率是 VSCode 启动时没加载 shell 的环境(比如没读 ~/.zshrc 或 ~/.bash_profile),导致 $HOME 错了,或 ssh 找不到配置文件。
- 在 VSCode 内置终端里运行
echo $HOME和ssh -G myhost | grep 'user\|identityfile',确认输出和你在 iTerm / Terminal 里一致 - macOS 上如果用 LaunchServices 启动 VSCode(比如 Dock 点开),它默认不会加载 shell 配置;改用终端启动:
code --remote ssh-remote+myhost - Windows 用户注意:WSL 下 VSCode Desktop 默认走 Windows 的 OpenSSH,不是 WSL 里的;想用 WSL 的
~/.ssh/config,得在设置里把remote.ssh.path指向/usr/bin/ssh(并确保 WSL 已启用远程支持)
Host 别名写错、大小写敏感、通配符失效?检查 ~/.ssh/config 语法细节
ssh 解析 config 文件是顺序匹配、**首个匹配即生效**,且 Host 行不支持正则,只支持 ?(单字符)、*(任意长度)、!*(排除)——但 VSCode 的 Remote-SSH 目前对通配符支持不稳定,建议全用精确 Host 名。
- 别名不能含下划线(
_)或大写字母(部分旧版 OpenSSH 会忽略);推荐全小写 + 连字符,例如Host prod-db-eu -
HostName必须写真实 IP 或域名;如果写成HostName localhost却想通过跳板机连,必须配合ProxyJump,不能只靠HostName - 多个 Host 共享同一组参数?别偷懒复制粘贴,用
Include复用片段(OpenSSH 7.3+ 支持):Include ~/.ssh/common.conf - 测试配置是否被识别:
ssh -F ~/.ssh/config -G your-host-name,看输出里的hostname、user、identityfile是否符合预期
Remote-SSH 连接慢、卡在 “Resolving host…”?排查 DNS 和 ControlMaster 冲突
VSCode 默认启用 ControlMaster auto(复用 TCP 连接),这在多主机场景下容易和本地 ~/.ssh/config 中的手动配置冲突,尤其当你同时用终端和 VSCode 连同一台机器时。
- 在
~/.ssh/config对应 Host 块里显式关闭:ControlMaster no,或设为ControlMaster auto+ControlPersist 60(避免长期占用) - 如果
HostName是内网域名(如web01.internal),而你的 DNS 不响应,VSCode 会卡住;换成 IP 或加一行UseDNS no - 跳板机(bastion)场景下,确保
ProxyJump或ProxyCommand中的中间主机本身能被 VSCode 正常解析和连接;否则先单独连通跳板机再试目标机 - 禁用 VSCode 的自动端口探测(减少扫描):
"remote.ssh.showLoginTerminal": false(设置里搜这个项)
不同主机要用不同私钥、用户、端口?别硬编码进连接字符串,用 config 分离管理
VSCode 连接面板里点 “+” 新建连接,填 ssh user@host:port 看似快,但无法复用密钥路径、跳转逻辑、环境变量等——所有这些都该交给 ~/.ssh/config 统一管。
- 每个 Host 块独立指定:
IdentityFile ~/.ssh/id_rsa_prod、User deploy、Port 2222 - 需要连接后自动加载环境?在对应 Host 下加:
SetEnv LANG=en_US.UTF-8(服务端需开启AcceptEnv) - Windows 用户用 PuTTY 密钥?不行。Remote-SSH 只认 OpenSSH 格式;用
ssh-keygen -p -f key.ppk转换,或直接生成 OpenSSH 密钥 - 密钥带密码?确保
ssh-agent已运行并添加了该密钥(ssh-add -l可查);VSCode 不弹图形化密码框,输错三次就断开
真正麻烦的从来不是写几行 config,而是 VSCode 启动方式、shell 环境、OpenSSH 版本、agent 状态这四者之间的隐式耦合——任何一个环节断了,都会表现为“配置明明写了却不生效”。调试时优先验证终端行为,再对比 VSCode 内置终端输出,比反复重装插件有用得多。











