修复 Git 无法连接 Pageant 的问题

现象

预期在 Windows 11 当前账号 .ssh\config 配置 ssh 配置后,使用 Git 免 ssh 证书密码登录

在 PowerShell 中执行以下命令

1
tasklist | findstr pageant 

示例

1
2
3
PS C:\Users\nobody> tasklist | findstr pageant        
pageant.exe 4900 Console 1 61,652 K
ssh-pageant.exe 1588 Console 1 8,772 K

如果出现 ssh-pageant 进程 ID 大于 pageant ID 的情况,则表明 ssh-pageant 与 pageant 无法正常通信

解决方案

在 PowerShell 中执行以下命令

1
notepad $PROFILE

粘贴一下代码,并保存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 检查 Pageant 是否正在运行
$pageantProcess = Get-Process pageant -ErrorAction SilentlyContinue

if ($pageantProcess) {
# 如果 Pageant 在运行,就运行 ssh-pageant 来获取并设置环境变量
# ssh-pageant 会输出类似 "export SSH_AUTH_SOCK='...';" 的 Bash 命令
# 我们用 PowerShell 的方式来解析它并设置环境变量
$output = ssh-pageant -r -a "$HOME/.ssh/pageant.socket"
$match = [regex]::Match($output, "SSH_AUTH_SOCK='([^']+)';")
if ($match.Success) {
$socketPath = $match.Groups[1].Value
$env:SSH_AUTH_SOCK = $socketPath
}
}

关闭所有的 PowerShell 或 命令窗口

验证

1
ssh -T git@example.com
1
2
PS C:\Users\nobody>ssh -T git@example.com
Welcome to GitLab, @gitUser!

如果还有其他问题,可以使用 ssh 调试命令,再分析其他原因

1
ssh -vvvT git@example.com