Git SSH 完整配置指南:Windows + WSL 双环境
目录
场景说明
需求
- 双环境使用:同时支持 Windows (VSCode) 和 WSL (命令行)
- 多仓库推送:一次推送同时更新 GitLab 和 Bitbucket
- 避免冲突:两个环境的配置互不干扰
已知问题
sign_and_send_pubkey: signing failed for RSA: error in libcryptoPermission denied (publickey)Warning: Identity file C:/Users/xxx/.ssh/id_ed25519_bitbucket not accessible- Windows 和 WSL 路径格式不同导致配置冲突
环境架构
┌─────────────────────────────────────────────────────────────┐
│ 你的开发环境 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Windows │ │ WSL │ │
│ │ (VSCode) │ │ (命令行) │ │
│ ├─────────────────┤ ├─────────────────┤ │
│ │ SSH Config: │ │ SSH Config: │ │
│ │ C:\Users\... │ │ ~/.ssh/config │ │
│ │ │ │ │ │
│ │ SSH Agent: │ │ SSH Agent: │ │
│ │ Windows 服务 │ │ 进程级 │ │
│ │ (持久化) │ │ (会话级) │ │
│ └─────────────────┘ └─────────────────┘ │
│ │ │ │
│ └────────────┬───────────────┘ │
│ │ │
│ ┌───────▼────────┐ │
│ │ 共享的 Git 仓库 │ │
│ │ /mnt/f/... │ │
│ └────────────────┘ │
│ │ │
│ ┌────────────┼────────────┐ │
│ │ │ │ │
│ ┌────▼───┐ ┌───▼────┐ ┌───▼────┐ │
│ │GitLab │ │Bitbucket│ │ 本地 │ │
│ └────────┘ └────────┘ └────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
完整配置步骤
第一部分:密钥管理(WSL 中操作)
步骤 1:生成 ED25519 密钥
# 在 WSL 中执行
cd ~
# 生成 ED25519 密钥(推荐,兼容性好)
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519_bitbucket
# 查看公钥内容(用于添加到 Git 服务器)
cat ~/.ssh/id_ed25519_bitbucket.pub
⚠️ 安全警告:
- ❌ 不要在聊天中公开私钥内容
- ✅ 私钥泄露后必须重新生成
- ✅ 在 Git 服务器上删除旧密钥并添加新密钥
步骤 2:添加公钥到 Git 服务器
GitLab 操作:
- 登录 GitLab → Settings → SSH Keys
- 粘贴
id_ed25519_bitbucket.pub内容 - 点击 “Add key”
Bitbucket 操作:
- 登录 Bitbucket → Personal settings → SSH keys
- 粘贴公钥内容
- 点击 “Add key”
第二部分:WSL 环境配置
步骤 3:配置 WSL SSH Config
# 创建/编辑 WSL SSH 配置文件
cat > ~/.ssh/config << 'EOF'
# GitLab
Host gitlab.linuxjk.cn
HostName gitlab.linuxjk.cn
User git
IdentityFile ~/.ssh/id_ed25519_bitbucket
IdentitiesOnly yes
# Bitbucket (SSH port 7999)
Host git.suit.local
HostName git.suit.local
Port 7999
User git
IdentityFile ~/.ssh/id_ed25519_bitbucket
IdentitiesOnly yes
EOF
# 设置正确的权限
chmod 600 ~/.ssh/config
步骤 4:启动 WSL SSH Agent(密钥如果无密码就可以不做这一步)
# 启动 SSH agent
eval "$(ssh-agent -s)"
# 添加密钥
ssh-add ~/.ssh/id_ed25519_bitbucket
# 验证密钥已添加
ssh-add -l
步骤 5:配置 WSL 自动启动 SSH Agent(密钥如果无密码就可以不做这一步)
# 添加到 ~/.bashrc 自动启动
cat >> ~/.bashrc << 'EOF'
# SSH Agent 自动启动
if [ -z "$SSH_AUTH_SOCK" ]; then
eval "$(ssh-agent -s)" > /dev/null
ssh-add ~/.ssh/id_ed25519_bitbucket > /dev/null 2>&1
fi
EOF
# 重新加载配置
source ~/.bashrc
步骤 6:配置兼容性(解决老版本 Git 服务器问题)
# 编辑全局 SSH 配置
sudo vim /etc/ssh/ssh_config
# 在文件末尾添加:
PubkeyAcceptedAlgorithms +ssh-rsa
HostKeyAlgorithms +ssh-rsa
步骤 7:测试 WSL 连接
# 测试 GitLab 连接
ssh -T git@gitlab.linuxjk.cn
# 期望输出: Welcome to GitLab, @root!
# 测试 Bitbucket 连接
ssh -p 7999 -T git@git.suit.local
# 期望输出: shell request failed on channel 0 (这是正常的)
# 测试 Git 推送
cd /mnt/f/城建信息/个人文档产出/脚本
git push ssh_gitlab master
git push ssh_bitbucket master
第三部分:Windows 环境配置
步骤 8:复制密钥到 Windows
# 在 WSL 中执行
cp ~/.ssh/id_ed25519_bitbucket /mnt/c/Users/24296/.ssh/
cp ~/.ssh/id_ed25519_bitbucket.pub /mnt/c/Users/24296/.ssh/
步骤 9:配置 Windows SSH Config
在 Windows 中创建文件 C:\Users\24296\.ssh\config:
# GitLab
Host gitlab.linuxjk.cn
HostName gitlab.linuxjk.cn
User git
IdentityFile ~/.ssh/id_ed25519_bitbucket
IdentitiesOnly yes
# Bitbucket (SSH port 7999)
Host git.suit.local
HostName git.suit.local
Port 7999
User git
IdentityFile ~/.ssh/id_ed25519_bitbucket
IdentitiesOnly yes
步骤 10:添加主机密钥到 Windows
在 PowerShell 中执行:
# 添加 GitLab 主机密钥
ssh-keyscan -H gitlab.linuxjk.cn >> $env:USERPROFILE\.ssh\known_hosts
# 添加 Bitbucket 主机密钥
ssh-keyscan -p 7999 -H git.suit.local >> $env:USERPROFILE\.ssh\known_hosts
步骤 11:配置 Windows SSH Agent 服务(密钥如果无密码就可以不做这一步)
以管理员身份打开 PowerShell,执行:
# 1. 启动 SSH agent 服务
Start-Service ssh-agent
# 2. 设置开机自启
Set-Service ssh-agent -StartupType Automatic
# 3. 添加密钥
ssh-add $env:USERPROFILE\.ssh\id_ed25519_bitbucket
# 4. 验证密钥已添加
ssh-add -l
期望输出:
256 SHA256:xxx zhangpeng@linuxjk.cn (ED25519)
步骤 12:测试 Windows 连接
在 PowerShell 中执行:
# 测试 GitLab 连接
ssh -T git@gitlab.linuxjk.cn
# 期望输出: Welcome to GitLab, @root!
# 测试 Bitbucket 连接
ssh -p 7999 -T git@git.suit.local
# 期望输出: shell request failed on channel 0 (这是正常的)

第四部分:配置一次推送到多个仓库
步骤 13:配置多目标推送
# 进入仓库目录
cd /mnt/f/城建信息/个人文档产出/脚本
# 清除旧的推送配置(如果存在)
git config --unset-all remote.ssh_gitlab.pushurl
# 设置主 push URL(GitLab)
git remote set-url ssh_gitlab git@gitlab.linuxjk.cn:root/zp_scripts.git
#这里达成的效果就是:执行git push -u ssh_gitlab master 会同时推送到两个仓库
# 添加第二个 push URL(Bitbucket)
git remote set-url --add --push ssh_gitlab git@gitlab.linuxjk.cn:root/zp_scripts.git
git remote set-url --add --push ssh_gitlab ssh://git@git.suit.local:7999/xtyy/zp_scripts.git
步骤 14:验证多仓库配置
# 查看推送 URL 配置
git config --get-all remote.ssh_gitlab.pushurl
# 期望输出:
# git@gitlab.linuxjk.cn:root/zp_scripts.git
# ssh://git@git.suit.local:7999/xtyy/zp_scripts.git

步骤 15:测试一次推送到两个仓库
# 创建测试提交
echo "test" > test-multi-remote.txt
git add test-multi-remote.txt
git commit -m "测试:一次推送到两个仓库"
# 推送
git push ssh_gitlab master
# 期望输出包含两行:
# To gitlab.linuxjk.cn:root/zp_scripts.git
# To ssh://git.suit.local:7999/xtyy/zp_scripts.git
# 验证两个仓库都已更新
git fetch ssh_gitlab master
git fetch ssh_bitbucket master
git log --oneline ssh_gitlab/master -1
git log --oneline ssh_bitbucket/master -1
步骤 16:在 VSCode 中使用
- 打开 VSCode
- 点击左侧源代码管理图标(Ctrl+Shift+G)
- 修改文件后暂存
- 输入提交消息
- 点击“推送”或“同步”按钮
- ✨ 自动同时推送到 GitLab 和 Bitbucket
第五部分:排除冲突配置(重要)
❌ 不要配置以下内容
# ❌ 不要使用这个配置(会导致 Windows 和 WSL 冲突)
git config core.sshCommand "ssh -i /root/.ssh/id_ed25519_bitbucket -F /root/.ssh/config"
# 原因:
# 1. 这是仓库级别的配置,存储在 .git/config
# 2. Windows 和 WSL 路径格式不同(C:\Users\ vs /root/)
# 3. 会导致环境切换时找不到密钥文件
✅ 正确的做法
使用 SSH Config 文件(推荐):
- Windows:
C:\Users\24296\.ssh\config - WSL:
~/.ssh/config - 各自独立配置,互不干扰
故障排查指南
问题 1:sign_and_send_pubkey: signing failed
原因:RSA 密钥兼容性问题
解决方案:
# 使用 ED25519 密钥(推荐)
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_bitbucket
# 或添加兼容性配置
sudo vim /etc/ssh/ssh_config
# 添加:
PubkeyAcceptedAlgorithms +ssh-rsa
HostKeyAlgorithms +ssh-rsa
问题 2:Permission denied (publickey)
可能原因:
- 公钥未添加到 Git 服务器
- 使用了错误的密钥
- SSH agent 未添加密钥
解决方案:
# 1. 检查公钥是否在服务器上
cat ~/.ssh/id_ed25519_bitbucket.pub
# 登录 Git 服务器确认
# 2. 测试使用的密钥
ssh -vT git@gitlab.linuxjk.cn
# 查看输出中的 "Offering public key"
# 3. 检查 SSH agent
ssh-add -l
# 如果为空,添加密钥:
ssh-add ~/.ssh/id_ed25519_bitbucket
问题 3:Windows 中 Warning: Identity file not accessible
错误信息:
Warning: Identity file C:/Users/24296/.ssh/id_ed25519_bitbucket not accessible: No such file or directory
原因:WSL 中配置的 Windows 路径在 WSL 中不可用
解决方案:
# 移除冲突的配置
cd /mnt/f/城建信息/个人文档产出/脚本
git config --local --unset core.sshCommand
# 使用 SSH Config 文件代替(参考步骤 3 和步骤 9)
问题 4:Could not open a connection to your authentication agent
原因:SSH agent 未运行
WSL 解决方案:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_bitbucket
Windows 解决方案:
# 以管理员身份运行 PowerShell
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519_bitbucket
问题 5:Host key verification failed
原因:主机密钥未添加到 known_hosts
解决方案:
# WSL
ssh-keyscan -H gitlab.linuxjk.cn >> ~/.ssh/known_hosts
ssh-keyscan -p 7999 -H git.suit.local >> ~/.ssh/known_hosts
# Windows PowerShell
ssh-keyscan -H gitlab.linuxjk.cn >> $env:USERPROFILE\.ssh\known_hosts
ssh-keyscan -p 7999 -H git.suit.local >> $env:USERPROFILE\.ssh\known_hosts
问题 6:只推送到了一个仓库
原因:多仓库推送配置不正确
解决方案:
# 检查配置
git config --get-all remote.ssh_gitlab.pushurl
# 重新配置
git remote set-url ssh_gitlab git@gitlab.linuxjk.cn:root/zp_scripts.git
git remote set-url --add --push ssh_gitlab git@gitlab.linuxjk.cn:root/zp_scripts.git
git remote set-url --add --push ssh_gitlab ssh://git@git.suit.local:7999/xtyy/zp_scripts.git
# 验证
git remote show ssh_gitlab | grep "Push URL"
问题 7:VSCode 中推送失败
检查清单:
- ✅ Windows SSH agent 是否运行?Get-Service ssh-agent
- ✅ 密钥是否已添加?ssh-add -l
- ✅ SSH 配置是否正确?cat $env:USERPROFILE\.ssh\config
- ✅ 测试连接是否成功?ssh -T git@gitlab.linuxjk.cn
最佳实践
1. 密钥管理
- ✅ 使用 ED25519 密钥:比 RSA 更安全、更快速
- ✅ 为不同环境使用独立密钥:Windows 和 WSL 可以共享,但要正确配置路径
- ✅ 定期更新密钥:提高安全性
- ❌ 不要在公开场合泄露私钥:泄露后必须立即重新生成
2. 配置管理
- ✅ 使用 SSH Config 文件:灵活、可维护
- ❌ 避免使用
core.sshCommand:在 Windows + WSL 环境中会导致冲突 - ✅ 分别配置 Windows 和 WSL:各自独立,互不干扰
3. SSH Agent
| 环境 | Agent 类型 | 启动方式 | 持久化 |
|---|---|---|---|
| Windows | 服务 | Start-Service ssh-agent | ✅ 开机自启 |
| WSL | 进程 | eval "$(ssh-agent -s)" | ❌ 会话级,需添加到 .bashrc |
4. Git 操作
- ✅ 使用多目标推送:一次命令推送多个仓库
- ✅ 测试后再正式使用:使用测试提交验证配置
- ✅ 定期同步:保持多个仓库的一致性
VSCode 中的最佳实践
推荐工作流
1. 开始工作前
└─ 点击"拉取"或"同步"按钮
└─ 确保本地是最新版本
2. 修改和暂存文件
└─ 点击源代码管理图标
└─ 暂存更改
3. 提交
└─ 输入提交信息
└─ 点击"提交"或"提交并推送"
4. 推送
└─ 点击"同步"按钮(拉取+推送)
└─ 自动处理远程更新
VSCode 按钮说明
| 按钮 | 功能 | 快捷键 |
|---|---|---|
| 拉取 | 从远程获取并合并 | Ctrl+Shift+G → 拉取 |
| 推送 | 发送到远程 | Ctrl+Shift+G → 推送 |
| 同步 | 拉取 + 推送 | Ctrl+Shift+G → 同步 |
| 丢弃 | 放弃本地更改 | 右键文件 → 丢弃更改 |
检查清单
在提交和推送前,建议养成这个习惯:
# 1. 检查状态
git status
# 2. 查看远程更新
git fetch --dry-run
# 3. 查看是否有分叉
git log --oneline --graph --all -5
# 4. 如果有分叉,先拉取
git pull
# 5. 然后再推送
git push
配置vscode自动拉取
配置验证清单
完成配置后,使用以下清单验证:
WSL 环境
- SSH 配置文件存在:
~/.ssh/config - 密钥文件存在:
~/.ssh/id_ed25519_bitbucket - SSH agent 运行中:
ssh-add -l有输出 - GitLab 连接成功:
ssh -T git@gitlab.linuxjk.cn - Bitbucket 连接成功:
ssh -p 7999 -T git@git.suit.local - 可以推送到两个仓库:
git push ssh_gitlab master
Windows 环境
- SSH 配置文件存在:
C:\Users\24296\.ssh\config - 密钥文件存在:
C:\Users\24296\.ssh\id_ed25519_bitbucket - SSH agent 服务运行中:
Get-Service ssh-agent - 密钥已添加:
ssh-add -l有输出 - GitLab 连接成功:
ssh -T git@gitlab.linuxjk.cn - Bitbucket 连接成功:
ssh -p 7999 -T git@git.suit.local
多仓库配置
- 配置了两个 push URL:
git config --get-all remote.ssh_gitlab.pushurl - 一次推送更新两个仓库:测试推送后检查两个仓库的最新提交
快速参考
常用命令
# WSL
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519_bitbucket
ssh -T git@gitlab.linuxjk.cn
git push ssh_gitlab master
# Windows PowerShell
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519_bitbucket
ssh -T git@gitlab.linuxjk.cn
# 一次推送到多个仓库
git push ssh_gitlab master # 自动推送到 GitLab 和 Bitbucket
配置文件路径
| 文件 | WSL 路径 | Windows 路径 |
|---|---|---|
| SSH Config | ~/.ssh/config | C:\Users\24296\.ssh\config |
| 私钥 | ~/.ssh/id_ed25519_bitbucket | C:\Users\24296\.ssh\id_ed25519_bitbucket |
| 公钥 | ~/.ssh/id_ed25519_bitbucket.pub | C:\Users\24296\.ssh\id_ed25519_bitbucket.pub |
| Known Hosts | ~/.ssh/known_hosts | C:\Users\24296\.ssh\known_hosts |
| Bashrc | ~/.bashrc | – |
附录:完整配置文件示例
WSL SSH Config (~/.ssh/config)
# GitLab
Host gitlab.linuxjk.cn
HostName gitlab.linuxjk.cn
User git
IdentityFile ~/.ssh/id_ed25519_bitbucket
IdentitiesOnly yes
# Bitbucket (SSH port 7999)
Host git.suit.local
HostName git.suit.local
Port 7999
User git
IdentityFile ~/.ssh/id_ed25519_bitbucket
IdentitiesOnly yes
Windows SSH Config (C:\Users\24296\.ssh\config)
# GitLab
Host gitlab.linuxjk.cn
HostName gitlab.linuxjk.cn
User git
IdentityFile ~/.ssh/id_ed25519_bitbucket
IdentitiesOnly yes
# Bitbucket (SSH port 7999)
Host git.suit.local
HostName git.suit.local
Port 7999
User git
IdentityFile ~/.ssh/id_ed25519_bitbucket
IdentitiesOnly yes
WSL Bashrc 自动启动 (~/.bashrc)
# SSH Agent 自动启动
if [ -z "$SSH_AUTH_SOCK" ]; then
eval "$(ssh-agent -s)" > /dev/null
ssh-add ~/.ssh/id_ed25519_bitbucket > /dev/null 2>&1
fi
Git Remote 配置
# 查看所有 remote
git remote -v
# 查看推送 URL
git config --get-all remote.ssh_gitlab.pushurl
# 期望输出:
# git@gitlab.linuxjk.cn:root/zp_scripts.git
# ssh://git@git.suit.local:7999/xtyy/zp_scripts.git
文档版本:v1.0 最后更新:2026-01-22 适用环境:Windows 11 + WSL 2 + Ubuntu + GitLab + Bitbucket