Logo
WSL 下 GitLab HTTP 用户名/密码凭据管理指南
概览
WSL 下 GitLab HTTP 用户名/密码凭据管理指南

WSL 下 GitLab HTTP 用户名/密码凭据管理指南

2026年9月11日
12 分钟阅读 (共 14 分钟阅读)
1 篇子文章

适用于:主要在 WSL 中开发、公司 GitLab 为自部署实例、仓库当前只能通过 HTTP Basic Authentication 使用的环境。

本文重点解决两个问题:凭据应该存在哪里,以及 不同 WSL 隔离策略下应该选哪种方案。

1. 适用场景与核心结论

典型场景如下:

  • 开发环境主要在 WSL 中;
  • GitLab 为公司自部署实例;
  • Git 仓库只能通过 http:// 访问;
  • 认证方式只有用户名 + 密码,或者至少当前只能按 HTTP Basic Authentication 使用;
  • 希望避免每次 git pull、git push、git fetch 都重新输入密码;
  • 同时又不希望简单地把密码明文写进 ~/.git-credentials;
  • Windows 主机上可能已经安装 Git for Windows 和 Git Credential Manager(GCM);
  • WSL 可能做了不同程度的隔离,例如不继承 Windows PATH、限制 Windows 环境变量,甚至完全关闭 Windows/WSL interop。

示例仓库地址:

http://gitlab.xxx/group/project.git

这里最重要的结论是:

WSL 并不是只能在 credential.helper store 和“每次手输密码”之间二选一。

能否复用 Windows Credential Manager,关键不在于“WSL 能不能看到 Windows 环境变量”,而在于 WSL 是否还能启动 Windows 进程,以及 Windows 磁盘是否可访问。

如果彻底关闭 Windows interop,WSL 仍然可以使用 Linux 自己的安全凭据方案,例如 GCM + GPG/pass、Secret Service,或者退一步使用只存内存的 credential cache。

2. 先选方案:30 秒决策

2.1 决策树

WSL Git 需要保存公司 GitLab 凭据
│
▼
WSL 能启动 Windows EXE 吗?
│ │
能 不能
│ │
▼ ▼
Windows 磁盘/GCM 可访问? 完全按 Linux 处理
│ │ │
是 否 ├─ 想长期安全保存
│ │ │ ↓
▼ ▼ │ Linux GCM
Windows GCM Linux 本地方案 │ + GPG/pass
+ WinCred │
│ ├─ 不想配密钥
│ │ ↓
│ │ credential cache
│ │
│ └─ 必须永久保存且无其他办法
│ ↓
│ credential store
│ (明文,最后手段)
▼
公司 GitLab 只有 Basic?
│
是
│
▼
provider = generic
│
▼
HTTP 是否触发 GCM 拒绝?
│ │
否 是
│ │
▼ ▼
保留安全警告 明确接受风险后再考虑
allowUnsafeRemotes=true

2.2 方案对比

场景推荐方案磁盘上是否明文重启后是否保留推荐度
WSL 可启动 Windows EXEWindows GCM + Windows Credential Manager否是★★★★★
WSL 完全隔离,允许安装 GPG/passLinux GCM + GPG/pass否,加密保存是★★★★★
WSL 有完整桌面 Secret ServiceLinux GCM + Secret Service否是★★★★☆
WSL 完全隔离,不想配置密钥Git/GCM credential cache否,只在内存否★★★★☆
无安全存储、又必须长期保存credential.helper store是是★☆☆☆☆

对于这种公司 GitLab 场景,建议优先顺序是:

Windows GCM + Windows Credential Manager
↓
Linux GCM + GPG/pass
↓
Linux Secret Service
↓
credential cache
↓
credential store(最后手段)

但还有一个更大的安全前提:

HTTPS / SSH
优于
HTTP

无论本地凭据保存得多安全,HTTP 都不能保护网络传输过程中的用户名和密码。

3. 判断 WSL 与 Windows 的隔离程度

很多配置问题都来自把“环境变量、PATH、Windows interop、Windows 磁盘挂载”混成一件事。先把这四件事分开。

3.1 Windows 环境变量是否传入 WSL

例如 Windows 中存在:

GIT_EXEC_PATH
HTTP_PROXY
HTTPS_PROXY
某些公司自定义变量

这些变量是否进入 WSL,是一类问题。

WSL 可以通过 WSLENV 等机制在 Windows 与 Linux 之间传递特定环境变量,但这和“能不能执行 Windows 程序”不是一回事。

因此:

WSL 看不到某个 Windows 环境变量

并不等于:

WSL 无法调用 git-credential-manager.exe

3.2 appendWindowsPath=false

/etc/wsl.conf 可以配置:

[interop]
appendWindowsPath=false

它的作用是:

不把 Windows PATH 中的目录自动追加到 WSL 的 $PATH。

结果可能是:

Terminal window
cmd.exe
powershell.exe
git-credential-manager.exe

直接输入时找不到。

但是只要:

[interop]
enabled=true

仍然可以通过显式路径启动 Windows 程序,例如:

Terminal window
/mnt/c/Windows/System32/cmd.exe /c ver

或者:

Terminal window
/mnt/d/Git/mingw64/bin/git-credential-manager.exe --version

所以:

关闭 Windows PATH 注入,不等于关闭 Windows interop。


3.3 [interop] enabled=false

如果配置为:

[interop]
enabled=false
appendWindowsPath=false

这才是更彻底的隔离。

此时 WSL 不能正常启动 Windows 进程,因此类似下面的方案失效:

Terminal window
/mnt/d/Git/mingw64/bin/git-credential-manager.exe

即使那个文件在 /mnt/d/... 下能够看见,也不能再依赖它作为 Windows 程序运行。

此时应当把 WSL 当成一台独立 Linux 主机,使用 Linux 本地凭据方案。


3.4 Windows 磁盘是否挂载

即使 interop 仍开启,如果公司安全策略又关闭了 Windows 磁盘自动挂载,例如没有:

/mnt/c
/mnt/d
/mnt/e

那么 WSL 也无法直接通过:

Terminal window
/mnt/e/tool/git/...

访问 Windows 上的 GCM。

这种情况下有两个方向:

  1. 如果策略允许,手动挂载相应 Windows 驱动器后继续复用 Windows GCM;
  2. 如果策略本来就是为了隔离 Windows 文件系统,则直接使用 Linux 本地凭据存储。

3.5 三步快速判断当前环境

可以先检查:

Terminal window
cat /etc/wsl.conf

重点看:

[interop]
enabled=...
appendWindowsPath=...

再测试:

Terminal window
/mnt/c/Windows/System32/cmd.exe /c echo WSL-interop-ok

情况 A:命令能够运行

说明 Windows interop 仍然可用。

即使:

Terminal window
command -v cmd.exe

没有输出,也可能只是:

appendWindowsPath=false

此时仍然可以考虑复用 Windows GCM。

情况 B:显式路径也无法启动 Windows EXE

通常说明:

  • [interop] enabled=false;或
  • WSL/企业策略禁止 Windows 进程互操作;或
  • Windows 驱动器根本没有挂载到 WSL。

此时应直接选择本文的 Linux 本地方案:长期保存优先使用 Linux GCM + GPG/pass;不想配置密钥时使用 credential cache。

4. 方案 A:WSL 复用 Windows Git Credential Manager(优先推荐)

4.1 适用条件

适用于:

  • Windows 已安装 Git for Windows;
  • Windows GCM 能正常工作;
  • WSL 仍然允许 Windows interop;
  • WSL 可以访问 GCM 所在 Windows 磁盘;
  • 希望 Windows Git 和 WSL Git 共用同一套凭据。

这是最省事的方案。

结构如下:

WSL Git
↓
Windows git-credential-manager.exe
↓
Windows Credential Manager
↓
公司 GitLab 用户名 / 密码

密码不会以 Git 的 ~/.git-credentials 明文形式存放在 WSL 中。

4.2 确认 Windows GCM 正常

在 Windows PowerShell 中:

Terminal window
git credential-manager --version

例如可能显示:

2.6.1+...

再运行:

Terminal window
git credential-manager diagnose

如果显示:

Diagnostic summary: ... passed, 0 failed

说明 GCM 本身工作正常。

diagnose 生成的日志可能包含敏感信息。不要直接把完整日志发送到聊天、工单或公共仓库。

4.3 找到 GCM,并在 WSL 中验证可执行

如果不知道 git-credential-manager.exe 的实际位置,可以直接在 Git for Windows 的安装目录中搜索。以下路径仅作为示例,实际安装目录以本机为准:

Terminal window
Get-ChildItem "D:\Git" `
-Filter "git-credential-manager.exe" `
-Recurse `
-ErrorAction SilentlyContinue |
Select-Object -ExpandProperty FullName

假设搜索结果为:

D:\Git\mingw64\bin\git-credential-manager.exe

在 WSL 中通常对应:

/mnt/d/Git/mingw64/bin/git-credential-manager.exe

直接测试:

Terminal window
"/mnt/d/Git/mingw64/bin/git-credential-manager.exe" --version

如果能够返回版本号,说明 Windows 驱动器可访问、WSL interop 可用。即使 Windows PATH 没有注入 WSL,也不影响使用显式路径。

4.4 在 WSL Git 中设置 Windows GCM 为 helper

在 WSL 中执行:

Terminal window
git config --global credential.helper "/mnt/d/Git/mingw64/bin/git-credential-manager.exe"

检查:

Terminal window
git config --show-origin --get-all credential.helper

应该能够看到 WSL 自己的 ~/.gitconfig 中记录了该 helper。

如果路径包含空格,例如标准安装:

C:\Program Files\Git\mingw64\bin\git-credential-manager.exe

可以按官方 WSL 示例写成:

Terminal window
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe"

4.5 公司 GitLab 只有 HTTP Basic 时:使用 generic provider

如果公司 GitLab 明确只有:

HTTP
+
用户名
+
密码

不需要 GitLab OAuth、浏览器登录、PAT 流程,那么最简单的是把该主机按 Generic HTTP Git 服务处理。

Windows PowerShell 中配置:

Terminal window
git config --global credential.gitlab.xxx.provider generic

如果公司服务明确不使用 Windows 集成认证(NTLM/Kerberos),还可以:

Terminal window
git config --global credential.gitlab.xxx.allowWindowsAuth false

这样 Generic provider 会直接走 Basic 用户名/密码逻辑,不必尝试 Windows Integrated Authentication。

为什么这里建议在 Windows PowerShell 中配置

当 WSL Git 调用的是:

Windows 版 git-credential-manager.exe

GCM 自身运行在 Windows 环境中。

官方说明指出:这种模式下 GCM 默认读取的是 Windows Git 配置,而不是 WSL 的 ~/.gitconfig。

因此要区分:

WSL ~/.gitconfig
└── 负责告诉 WSL Git:credential.helper 是哪个程序
Windows %USERPROFILE%\.gitconfig
└── 负责配置 Windows GCM 自己的 provider、代理等行为

这点很重要。

4.6 第一次认证后的流程

完成 WSL helper 和 Windows GCM provider 配置后,在 WSL:

Terminal window
git pull

首次可能提示用户名和密码。

认证成功后结构变成:

WSL Git
↓
Windows GCM
↓
Windows Credential Manager
↓
保存 gitlab.xxx 对应凭据

之后:

Terminal window
git fetch
git pull
git push

通常不需要重复输入。

Windows Git 和 WSL Git 还可以共享同一份 Windows 凭据。

5. 方案 B:完全隔离时使用 Linux GCM + GPG/pass

如果:

[interop]
enabled=false

或者公司明确要求:

WSL 不得调用任何 Windows 程序

那么不要再绕回 Windows Credential Manager。

此时推荐:

WSL Git
↓
Linux GCM
↓
GPG/pass
↓
加密后的凭据文件

这是 WSL 内部相对完整的长期安全保存方案。


5.1 Linux GCM 并不是只能用明文 store

GCM 在 Linux 上支持多种 credential store,包括:

  • gpg
  • secretservice
  • cache
  • plaintext
  • none

Linux 上默认不会替你自动选一个安全存储,需要自己配置。

其中对纯终端 WSL 最实用的是:

gpg

5.2 安装 GPG 和 pass

以 Debian/Ubuntu 类发行版为例:

Terminal window
sudo apt update
sudo apt install gnupg pass

生成 GPG key:

Terminal window
gpg --full-generate-key

查看密钥:

Terminal window
gpg --list-secret-keys --keyid-format=long

选择自己的 key ID 或 fingerprint,然后初始化 pass:

Terminal window
pass init <YOUR_GPG_KEY_ID>

建议在 shell 环境中设置:

Terminal window
export GPG_TTY=$(tty)

如果长期使用,可以放入:

~/.bashrc

或对应 shell 的启动文件。


5.3 安装 Linux 版 GCM

当前 GCM 官方在 Linux 上支持安装为 .NET global tool。

按照当前官方安装方式,需要满足相应 .NET SDK 版本要求,然后:

Terminal window
dotnet tool install -g git-credential-manager
git-credential-manager configure

安装后检查:

Terminal window
git-credential-manager --version

以及:

Terminal window
git config --show-origin --get-all credential.helper

5.4 让 Linux GCM 使用 GPG/pass

Terminal window
git config --global credential.credentialStore gpg

公司 GitLab 继续配置为 Generic:

Terminal window
git config --global credential.gitlab.xxx.provider generic

Linux 下没有 Windows Integrated Authentication,因此不需要配置:

allowWindowsAuth

之后:

Terminal window
git pull

第一次输入 GitLab 用户名和密码,GCM 会通过 GPG/pass 保存加密凭据。

默认的 pass-compatible store 通常在:

~/.password-store

里面是 GPG 加密后的数据,而不是 username:password 明文。


5.5 GPG/pass 的特点

优点:

  • 密码不是明文保存在 WSL 文件系统;
  • 不依赖 Windows Credential Manager;
  • 适合完全关闭 interop 的 WSL;
  • 可以长期保存;
  • 纯终端环境也可以使用。

代价:

  • 第一次配置比 store 麻烦;
  • 需要维护 GPG 私钥;
  • GPG 私钥有口令时,首次使用可能需要输入 GPG key passphrase;
  • gpg-agent 的缓存状态会随着 WSL 会话生命周期变化。

如果只是保存 GitLab 登录密码,GPG 私钥丢失通常不会导致仓库数据丢失,但需要重新建立凭据存储并重新输入 GitLab 密码。

6. 其他可选方案

6.1 不长期保存:credential cache

如果你不想安装 GPG,也不希望密码落盘,Git 自带的 credential cache 非常实用。

例如缓存 8 小时:

Terminal window
git config --global credential.helper 'cache --timeout=28800'

其中:

28800 秒 = 8 小时

流程:

第一次 git pull
↓
输入用户名密码
↓
credential-cache daemon 保存在内存
↓
8 小时内复用
↓
超时 / daemon 退出 / WSL 关闭
↓
凭据消失

Git 官方说明 credential-cache 把凭据保存在内存中的 daemon 中,而不是长期写入磁盘。

优点:

  • 配置非常简单;
  • 不在磁盘保存 GitLab 密码;
  • 适合每天启动一次 WSL 的开发习惯;
  • 不依赖 Windows;
  • 不要求 GPG。

缺点:

  • 超时后必须重新输入;
  • WSL 关闭后通常要重新认证;
  • 不适合要求无人值守长期运行的 Git 操作。

如果你能接受“每天输入一次公司 GitLab 密码”,这个方案其实非常平衡。


如果已经安装 Linux GCM,也可以让 GCM 使用 cache

Terminal window
git config --global credential.credentialStore cache

默认缓存时间通常为 900 秒。

可以设置:

Terminal window
git config --global credential.cacheOptions "--timeout 28800"

这种方式是:

Git
→ GCM
→ Git credential cache

而直接:

Terminal window
git config --global credential.helper 'cache --timeout=28800'

则是:

Git
→ Git credential-cache

如果你的公司 GitLab 只需要最普通的 HTTP Basic 用户名/密码,实际上不一定需要为了 cache 专门安装 GCM。

6.2 Linux GCM + Secret Service

GCM 在 Linux 上还支持:

Terminal window
git config --global credential.credentialStore secretservice

它使用 freedesktop Secret Service / libsecret 体系。

这种体验更接近桌面 Linux 的系统钥匙串。

但要注意:

GCM 官方说明该方式需要图形会话来解锁 secret collection。

因此在普通无桌面的 WSL、纯 SSH shell、服务器型 WSL 环境里,它往往没有 GPG/pass 稳定。

如果你的 WSL 具备完整桌面/WSLg 环境,也不能仅因为“有 GUI”就假设已经存在可用 Secret Service daemon;还需要实际安装并运行对应组件。

因此通常不把它作为 WSL 首选。

6.3 credential.helper store:只作为最后手段

最简单的是:

Terminal window
git config --global credential.helper store

然后:

Terminal window
git pull

输入用户名和密码后,Git 通常会写入:

~/.git-credentials

内容本质上类似:

http://username:password@gitlab.xxx

这是明文。

即使执行:

Terminal window
chmod 600 ~/.git-credentials

也只是限制其他 Linux 用户直接读取该文件,并没有对密码做加密。

因此:

chmod 600

不能把 store 变成安全密钥库。


不建议用 cat ~/.git-credentials 验证

下面这条命令会直接显示凭据文件内容:

Terminal window
cat ~/.git-credentials

不推荐这样做,因为会直接把密码显示在:

  • 终端;
  • 截图;
  • shell 录屏;
  • 日志系统;
  • 聊天粘贴内容。

需要确认文件是否存在,只看:

Terminal window
ls -l ~/.git-credentials

即可。

不要把 .git-credentials 内容复制到聊天、工单、Wiki 或代码仓库。

7. 几个容易踩坑的关键细节

7.1 GCM 与 Windows Credential Manager 不是两个互斥方案

容易出现一个误解:

方案 A:GCM
方案 B:Windows Credential Manager

实际上在 Windows 默认情况下,关系是:

Git
↓
Git Credential Manager
↓
Windows Credential Manager

GCM 是 Git 与系统凭据存储之间的 credential helper;Windows Credential Manager 是底层安全存储之一。

Windows 上 GCM 默认使用:

wincredman

因此通常不需要手工去“控制面板 → 凭据管理器”创建 GitLab 条目。

更合理的方式是:

让 Git/GCM 自动创建和维护凭据

手工维护 Windows Credential Manager 条目容易因为 target/service 名称不匹配导致:

凭据明明存在,但 Git 仍然询问密码

7.2 Windows GCM 与 Linux GCM 读取的配置不同

这是实际排查时非常重要的一点。

WSL 调 Windows GCM

WSL Git
→ Windows GCM EXE

此时:

WSL Git 配置

通常位于:

/home/<user>/.gitconfig

主要负责:

credential.helper = Windows GCM 路径
Windows GCM 配置

通常从 Windows Git 配置读取,例如:

%USERPROFILE%\.gitconfig

因此:

provider
autoDetectTimeout
allowWindowsAuth
代理相关配置

如果是给 Windows GCM 使用,通常应在 Windows Git 那边设置。


WSL 安装 Linux GCM

WSL Git
→ Linux GCM

此时 GCM 本身运行在 Linux 中,就使用 WSL/Linux 的 Git 配置。

例如:

Terminal window
git config --global credential.gitlab.xxx.provider generic
git config --global credential.credentialStore gpg

都写入 Linux 用户的配置即可。

7.3 GitLab provider:generic 已经足够时,不必复杂化

GCM 的 GitLab provider 本身支持:

  • Browser OAuth;
  • Personal Access Token;
  • Username/password。

理论上也可以配置为 GitLab provider,并限制为 Basic。

但是对于一个:

自建 GitLab
只有 HTTP Basic
没有 OAuth
不需要 GitLab API 认证流程

的服务器,generic 更直接,也更不容易触发 GitLab 专用 OAuth/探测逻辑。

因此这里默认:

provider = generic

7.4 HTTP 与 credential.allowUnsafeRemotes

排查 HTTP 认证失败时,可能会用到这个配置:

Terminal window
git config --global credential.allowUnsafeRemotes true

是否需要开启,要看 GCM 版本和 provider 的实际行为,不能只根据使用 HTTP 就决定。

它是什么

GCM 默认把未加密 HTTP 远程视为不安全 URL。

配置:

Terminal window
git config --global credential.allowUnsafeRemotes true

表示明确允许 GCM 在不安全远程上发送凭据。

这是一个安全降级开关。


对 Generic provider,不一定必须开启

当前 GCM 的 Generic provider 对普通 HTTP 的行为是:

警告 HTTP 不安全

而不是一律直接禁止 Basic 凭据。

因此对于:

provider = generic

不应机械地认为 allowUnsafeRemotes=true 一定是必需项。

建议流程:

  1. 先设置 provider=generic;
  2. 正常执行 git pull;
  3. 如果只是收到 HTTP 风险警告,但认证正常,可以保留警告;
  4. 如果当前 GCM 版本/provider 明确拒绝不安全远程,而公司又只能 HTTP,再决定是否开启。

如果必须开启,应知道它是全局安全降级

例如 Windows GCM 使用 Windows Git 配置时:

Terminal window
git config --global credential.allowUnsafeRemotes true

这不是“让 GitLab.xxx 变安全”,而是告诉 GCM:

我接受在不加密 HTTP 上发送凭据的风险

因此只应在公司环境确实无法改 HTTPS/SSH 时使用。

7.5 同一 GitLab 多仓库、多账号

Git 默认主要按:

protocol + host

匹配 HTTP 凭据。

也就是说同一个:

http://gitlab.xxx

下面多个仓库,通常会共用一套用户名/密码。

对于公司统一账号,这正好是需要的行为。

如果某些特殊环境要求同一主机不同 path 使用不同凭据,可以进一步研究:

credential.useHttpPath

但普通 GitLab 单账号场景不要随便开启,否则可能导致每个 group/project 都产生独立凭据,反而增加维护复杂度。

8. 常见排障与恢复

8.1 where.exe git-credential-manager.exe 找不到,不代表 GCM 不存在

Windows 中可能出现:

Terminal window
where.exe git

能够找到:

D:\Git\cmd\git.exe
D:\Git\bin\git.exe

但:

Terminal window
where.exe git-credential-manager.exe

却返回:

INFO: Could not find files for the given pattern(s).

同时:

Terminal window
git credential-manager --version

又能正常执行。

这是正常的。

原因是:

where.exe

只按照 Windows PATH 搜索,而:

git credential-manager

属于 Git 子命令机制,Git 还会从自己的执行目录中寻找:

git-credential-manager.exe

因此真正要找 GCM 文件路径,建议直接搜索 Git 安装目录。

例如:

Terminal window
Get-ChildItem "D:\Git" `
-Filter "git-credential-manager.exe" `
-Recurse `
-ErrorAction SilentlyContinue |
Select-Object -ExpandProperty FullName

典型位置可能类似:

D:\Git\mingw64\bin\git-credential-manager.exe

实际位置以搜索结果为准。

8.2 安全地清除错误凭据

优先使用 Git credential 接口

可以让 Git 通知当前 helper 删除对应凭据:

Terminal window
printf 'protocol=http\nhost=gitlab.xxx\n\n' | git credential reject

这样不会把密码显示出来。

之后重新:

Terminal window
git pull

Git/GCM 会再次要求输入。


credential cache 清空

如果使用的是 Git 内存 cache:

Terminal window
git credential-cache exit

之后缓存 daemon 会退出,内存中的凭据被清除。


Windows Credential Manager

如果使用 Windows GCM,也可以通过 Windows:

控制面板
→ 凭据管理器
→ Windows 凭据

检查/删除对应 Git 凭据。

也可以让 GCM/Git 自己 erase/reject,通常比手工创建条目更推荐。

8.3 helper 配错后的回退

先看当前 helper:

Terminal window
git config --show-origin --get-all credential.helper

如果确认要移除全局 helper:

Terminal window
git config --global --unset-all credential.helper

如果不存在该项,Git 可能返回非零状态,这是正常的。

查看所有 credential 相关配置:

Terminal window
git config --show-origin --get-regexp '^credential\.'

不要在不知道来源的情况下直接删除系统级配置;先通过:

--show-origin

确认是哪一个配置文件写入的。

8.4 WSL 侧排查命令

查看 Git:

Terminal window
git --version
command -v git

查看 remote:

Terminal window
git remote -v

查看 helper:

Terminal window
git config --show-origin --get-all credential.helper

查看全部 credential 配置:

Terminal window
git config --show-origin --get-regexp '^credential\.'

查看 WSL interop:

Terminal window
cat /etc/wsl.conf

测试 Windows interop:

Terminal window
/mnt/c/Windows/System32/cmd.exe /c echo WSL-interop-ok

测试指定 Windows GCM:

Terminal window
"/mnt/d/Git/mingw64/bin/git-credential-manager.exe" --version

实际路径以本机搜索结果为准。

8.5 Windows 侧排查命令

确认 Git:

Terminal window
git --version
where.exe git

确认 GCM:

Terminal window
git credential-manager --version
git credential-manager diagnose

查看 helper:

Terminal window
git config --show-origin --get-all credential.helper

查看 credential 配置:

Terminal window
git config --show-origin --get-regexp '^credential\.'

寻找 GCM EXE:

Terminal window
Get-ChildItem "D:\Git" `
-Filter "git-credential-manager.exe" `
-Recurse `
-ErrorAction SilentlyContinue |
Select-Object -ExpandProperty FullName

如果 Git 安装位置不同,替换根目录。

9. 安全边界:HTTP 才是最大的风险

本地凭据管理只能解决:

密码在本机怎么保存

不能解决:

密码经过网络时怎么保护

HTTP 没有 TLS。

Basic Authentication 也不是加密协议;凭据编码不能代替 TLS。

因此,即使使用:

Windows Credential Manager

或者:

GPG/pass

也只能保证密码在本地磁盘上不以普通明文形式保存。

当执行:

Terminal window
git pull
git push

时,HTTP 链路本身仍然缺乏 HTTPS 提供的机密性与服务器身份验证。

所以真正理想的优先级仍然是:

HTTPS
↓
SSH
↓
HTTP + 安全本地凭据存储
↓
HTTP + 内存 cache
↓
HTTP + 明文 store

如果公司只能 HTTP,至少应尽量确保:

  • 只在可信内网使用;
  • 或必须先连接公司 VPN;
  • 不在公共 Wi-Fi/不可信网络直接访问;
  • 不把 GitLab 密码复用到其他重要系统;
  • 推动 GitLab 最终提供 HTTPS 或 SSH。

9.1 无人值守脚本的额外注意事项

如果只有:

HTTP + 账号密码

这本身就不是理想的无人值守认证设计。

不要简单把个人登录密码硬编码到:

  • shell script;
  • .env;
  • Git remote URL;
  • CI 配置明文;
  • ~/.git-credentials。

更合理的是推动公司侧提供:

  • HTTPS;
  • SSH deploy key;
  • deploy token;
  • PAT;
  • CI 专用凭据;
  • 其他最小权限机器凭据。

如果公司当前确实不支持,只能根据企业安全要求选择受控的 secret store。

10. 官方资料