git连接双仓库配置wsl和windows

目录

Git SSH 完整配置指南:Windows + WSL 双环境

目录


场景说明

需求

  1. 双环境使用:同时支持 Windows (VSCode) 和 WSL (命令行)
  2. 多仓库推送:一次推送同时更新 GitLab 和 Bitbucket
  3. 避免冲突:两个环境的配置互不干扰

已知问题

  • sign_and_send_pubkey: signing failed for RSA: error in libcrypto
  • Permission 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 操作:

  1. 登录 GitLab → Settings → SSH Keys
  2. 粘贴 id_ed25519_bitbucket.pub 内容
  3. 点击 “Add key”

Bitbucket 操作:

  1. 登录 Bitbucket → Personal settings → SSH keys
  2. 粘贴公钥内容
  3. 点击 “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 (这是正常的)
image-20260122172004854

第四部分:配置一次推送到多个仓库

步骤 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
image-20260122172400735

步骤 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 中使用

  1. 打开 VSCode
  2. 点击左侧源代码管理图标(Ctrl+Shift+G)
  3. 修改文件后暂存
  4. 输入提交消息
  5. 点击“推送”或“同步”按钮
  6. 自动同时推送到 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)

可能原因

  1. 公钥未添加到 Git 服务器
  2. 使用了错误的密钥
  3. 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 中推送失败

检查清单

  1. ✅ Windows SSH agent 是否运行?Get-Service ssh-agent
  2. ✅ 密钥是否已添加?ssh-add -l
  3. ✅ SSH 配置是否正确?cat $env:USERPROFILE\.ssh\config
  4. ✅ 测试连接是否成功?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/configC:\Users\24296\.ssh\config
私钥~/.ssh/id_ed25519_bitbucketC:\Users\24296\.ssh\id_ed25519_bitbucket
公钥~/.ssh/id_ed25519_bitbucket.pubC:\Users\24296\.ssh\id_ed25519_bitbucket.pub
Known Hosts~/.ssh/known_hostsC:\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

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部