记一次 Windows SSH 配置"战役":从权限报错到网络突围
最近在 Windows 11 上配置 Git SSH 时,我遭遇了一连串看似"无解"的报错。从公钥权限被拒,到连接被远程关闭,再到配置文件被系统锁定无法修改。这篇文章记录了我解决问题的完整思路、核心原理和实用技巧,希望能帮你少走弯路。
⚔️ 第一回合:公钥配置
报错信息
Permission denied (publickey)复制了 id_rsa.pub,也添加到了 GitHub,但还是报错。
问题根源
GitHub 不认识我电脑的身份 —— 公钥没有正确关联。
关键操作
1. 检查公钥格式
确保将完整的公钥(以 ssh-rsa 开头)添加到 GitHub 账户的 SSH Keys 设置中:
# 查看公钥内容
cat ~/.ssh/id_rsa.pub小贴士:可以去掉末尾的邮箱注释,不影响功能。
2. 测试连接
在 Git Bash 中执行以下命令进行调试:
ssh -T git@github.com如果成功,你会看到:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.经验总结
公钥认证的原理是 "匹配密钥对":
- 私钥:留在本地(
~/.ssh/id_rsa),绝不外泄 - 公钥:放在远程(GitHub SSH Keys 设置)
ssh -T 是验证连接最直接有效的命令。
🚧 第二回合:网络封锁
报错信息
Connection closed by 172.182.252.133 port 22公钥明明是对的,连接却被瞬间切断。
问题根源
网络防火墙屏蔽了 SSH 默认的 22 端口 —— 在公司网络或公共 Wi-Fi 中很常见。
关键操作
通过配置 SSH 客户端,让连接走 HTTPS 的 443 端口(通常不会被屏蔽)。
核心配置文件:~/.ssh/config
Windows 下路径:
C:\Users\你的用户名\.ssh\config(无后缀)
关键配置内容:
Host github.com
Hostname ssh.github.com
Port 443
User git经验总结
SSH 连接不一定非要用 22 端口。GitHub 官方提供了 443 端口的支持,这是解决网络封锁问题的关键。
# 验证 443 端口连接
ssh -T -p 443 git@ssh.github.com🔐 第三回合:权限僵局
问题描述
修改 ~/.ssh/config 文件时,Windows 提示:
- "权限不足"
- "文件访问被拒绝"
即使以管理员身份打开记事本,也无法直接保存。
问题根源
.ssh 文件夹及内部的配置文件,默认所有者可能是 SYSTEM 或之前的用户,当前账户只有读取权限。
创新解法(迂回战术)
当直接修改受阻时,采用 "复制→编辑→覆盖" 的迂回战术:
Step 1:复制文件到桌面
# 将 config 复制到桌面
copy C:\Users\你的用户名\.ssh\config C:\Users\你的用户名\Desktop\config.copyStep 2:管理员编辑
以管理员身份运行记事本,打开桌面的 config.copy 进行修改并保存。
Step 3:备份原文件
# 回到 .ssh 文件夹,备份原文件
cd C:\Users\你的用户名\.ssh
ren config config.backupStep 4:覆盖原文件
# 将修改好的文件复制回 .ssh 目录
copy C:\Users\你的用户名\Desktop\config.copy C:\Users\你的用户名\.ssh\config经验总结
当系统权限复杂导致无法直接修改时,通过 "复制→管理员编辑→重命名覆盖" 的方式,可以优雅地绕过权限检查,且不影响最终结果。
💡 进阶技巧:如果经常遇到权限问题,可以修改
.ssh文件夹的所有者:powershell# 右键 .ssh 文件夹 → 属性 → 安全 → 高级 → 更改所有者 # 将所有者改为当前用户,并勾选"替换子容器和对象的所有者"
💎 最终战果
配置好 config 文件后,再次执行:
ssh -T git@github.com熟悉的欢迎信息出现了:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.至此,所有障碍都被扫清,Git 仓库可以正常克隆和推送。
核心心得
在技术排查中,读懂报错信息背后的潜台词比盲目尝试更重要:
| 报错关键词 | 可能原因 | 排查方向 |
|---|---|---|
Permission denied | 公钥未配置/格式错误 | 检查 GitHub SSH Keys 设置 |
Connection closed | 网络/端口问题 | 尝试 443 端口 |
文件访问被拒绝 | 文件权限问题 | 检查文件所有者/使用迂回战术 |
希望这篇实战记录能成为你排查 SSH 问题时的一份参考索引。