You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

WSL Ubuntu 22.04中Git SSH克隆失败:手动连接正常但无法触发DuoConnect浏览器认证

WSL Ubuntu 22.04中Git SSH克隆失败:手动连接正常但无法触发DuoConnect浏览器认证

看起来你遇到了挺棘手的问题——手动跑DuoConnect和ssh -v都能正常唤起浏览器认证,偏偏Git克隆的时候就掉链子,连日志都没输出,最后还超时。我帮你梳理几个大概率能解决问题的方向,咱们一步步排查:

1. 先修复SSH配置的重复Host条目

你当前的~/.ssh/config里有两个完全一样的Host <server>条目,SSH会自动忽略前面的,只应用最后一个的配置。这就导致你的IdentityFile密钥配置根本没生效,等于Git克隆时用的SSH连接没带密钥,自然没法正常触发认证流程。

把两个Host块合并成一个:

Host <server>
    HostName <server>
    IdentityFile ~/.ssh/id_ed25519
    ProxyCommand duoconnect -host=%h:%p -relay=<server> -log ~/duoconnect.log

保存配置后先试试ssh <server>能不能正常连接,没问题再跑Git克隆。

2. 强制Git使用WSL原生的SSH客户端

有时候WSL里的Git会偷偷调用Windows端的SSH(比如你装了Git for Windows),这会导致环境变量、配置路径不匹配,DuoConnect没法正常唤起浏览器。咱们手动指定Git用WSL系统的SSH:

git config --global core.sshCommand "/usr/bin/ssh"

设置完再测试克隆,确保Git用的是WSL里的SSH,能读取到你刚才修复的.ssh/config

3. 确保Git运行时能拿到正确的DISPLAY环境变量

手动在终端跑命令时,你的DISPLAY变量是正常的(不然浏览器也打不开),但Git执行SSH时可能在非交互式shell下,没加载这个变量,导致DuoConnect没法唤起图形界面。

先确认当前终端的DISPLAY值:

echo $DISPLAY

然后把这个值加到Git的环境配置里:

git config --global core.env "DISPLAY=$DISPLAY"

如果每次启动WSL都需要重新设置DISPLAY,也可以把下面的命令加到~/.profile里(非交互式shell会加载这个文件):

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0

4. 检查DuoConnect日志的权限和路径

你设置的日志路径是~/duoconnect.log,手动运行时没问题,但Git运行时的用户上下文可能没权限写入这个文件,或者路径解析有问题。改成绝对路径试试,同时确保文件可写:

touch /home/你的用户名/duoconnect.log
chmod 644 /home/你的用户名/duoconnect.log

然后把SSH配置里的日志路径改成绝对路径:

ProxyCommand duoconnect -host=%h:%p -relay=<server> -log /home/你的用户名/duoconnect.log

这样如果Git克隆时触发了DuoConnect,日志会被正确写入,方便你排查具体哪里出问题。

最后再试一次

先重启WSL终端,确保所有配置生效,然后执行:

git clone git@<server>:<你的仓库路径>.git

如果还是不行,看看~/duoconnect.log里有没有新的日志内容,或者再跑GIT_SSH_COMMAND="ssh -v" git clone ...,这样能看到Git调用SSH的详细日志,更容易定位问题。

备注:内容来源于stack exchange,提问作者zerotwo

火山引擎 最新活动