ssh config文件windows路径为c:\users{用户名}.ssh\config,macos/linux为~/.ssh/config,权限须设为600;host别名需与git远程url主机名完全匹配;identityfile必须用绝对路径且私钥建议无密码或已加入ssh-agent。

SSH config 文件写在哪、怎么命名
Windows 用户的 config 文件必须放在 C:\Users\{用户名}\.ssh\config(注意是 config,无后缀);macOS / Linux 是 ~/.ssh/config。文件权限必须是 600(macOS/Linux 下执行 chmod 600 ~/.ssh/config),否则 OpenSSH 会直接忽略它——这是最常被跳过的一步,连 ssh -T git@github.com 都可能报 “Permission denied (publickey)” 却查不到原因。
常见错误现象:ssh -F ~/.ssh/config -v git@github.com 显示 “no such identity” 或压根没读 config;实际是因为路径错、权限错、或文件名写成 config.txt。
Host 别名必须和 Git remote URL 里的主机名完全匹配
Git clone 或 push 时,SSH 只认 URL 中的主机字段。比如你设了 Host github-work,那远程地址必须写成 git@github-work:org/repo.git,而不是 git@github.com:org/repo.git——哪怕你在 config 里写了 HostName github.com,也不影响匹配逻辑。
实操建议:
- 用
git remote set-url origin git@github-work:org/repo.git替换原始 remote - 别指望 alias 能“自动替换” github.com;SSH 不做 DNS 解析级别的重写
- 多个账号共用 github.com 时,必须为每个账号定义不同 Host 别名(如
github-personal、github-work)
IdentityFile 路径必须写绝对路径,且私钥不能带密码(或需 ssh-agent)
IdentityFile 不支持波浪线 ~ 或相对路径。写 ~/.ssh/id_rsa_work 会被当成字面字符串,导致找不到密钥。必须展开为完整路径,例如 Windows:C:\Users\Alice\.ssh\id_rsa_work,macOS:/Users/Alice/.ssh/id_rsa_work。
另一个坑:如果私钥设置了密码,每次 git 操作都会卡住等输入——除非已用 ssh-add 加入 agent。VSCode 内置终端默认不继承系统 ssh-agent 环境,所以即使你本地能免密登录,VSCode 的 Source Control 面板仍可能失败。
解决方法:
- macOS:确保
~/.ssh/config含AddKeysToAgent yes - Windows(OpenSSH for Windows):启动
ssh-agent服务,并在 VSCode 终端中运行ssh-add ~/.ssh/id_rsa_work - 或者干脆用无密码私钥(仅限可信环境)
VSCode 的 Git 操作是否走 SSH config 完全取决于它调用的 git 二进制
VSCode 默认使用系统 PATH 里的 git,不是它内置的。只要你的终端里 git clone git@github-work:org/repo.git 能成功,VSCode 就能成功——反之亦然。验证方式:打开 VSCode 内置终端,执行 which git 和 git config --global core.sshCommand,确认没意外覆盖。
容易被忽略的点:
- 某些 VSCode 插件(如 GitHub Pull Requests)会绕过 git 命令,直接调用 GitHub API,此时 SSH config 完全不生效
- 如果设置了
core.sshCommand(例如强制用ssh -i ~/.ssh/xxx),它会优先于~/.ssh/config中的IdentityFile,造成冲突 - WSL 用户要注意:Windows VSCode 和 WSL 中的 git 配置是两套,别在 WSL 里配好就以为 Windows GUI 也生效











