ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Git Credential Manager(GCM)全面指南:跨平台 Git 凭据安全存储与多因素认证实战

2026/9/16 13:50:54 拓冰建站 浏览量
Git Credential Manager(GCM)全面指南:跨平台 Git 凭据安全存储与多因素认证实战 Git Credential ManagerGCM全面指南跨平台 Git 凭据安全存储与多因素认证实战【免费下载链接】git-credential-managerSecure, cross-platform Git credential storage with authentication to GitHub, Azure Repos, and other popular Git hosting services.项目地址: https://gitcode.com/GitHub_Trending/gi/git-credential-managerGit Credential ManagerGCM是一个基于 .NET 构建、运行于 Windows、macOS 与 Linux 的安全 Git 凭据助手为 Azure DevOps、Bitbucket、GitHub、GitLab 等主流托管平台提供一致且安全含多因素认证的认证体验。本文以仓库根目录的 README.md 为主线结合 docs/ 下的安装、配置、凭据存储等文档与 src/shared/ 源码实现系统讲解 GCM 的定位、平台支持、安装配置、认证流程、凭据存储选型与排障手段帮助你理解它为何能替代 Git 内建的单因素凭据助手并能在自己的环境中落地使用。GCM 是什么安全的跨平台 Git 凭据助手Git Credential Manager 是一个安全的 Git credential helperGit 凭据助手构建在 .NET 之上可运行于 Windows、macOS 和 Linux。它的核心目标是为每一个主流源码托管服务与平台提供一致且安全的认证体验包括多因素认证MFA。GCM 按字母顺序支持以下托管服务Azure DevOpsAzure DevOps Server原 Team Foundation Server即 TFSBitbucketGitHubGitLab与之对比Git 自带的凭据助手Windows 的wincred、macOS 的osxkeychain、Linux 的gnome-keyring/libsecret仅提供用户名/密码的单因素认证。GCM 将认证提升到了 OAuth、设备码、个人访问令牌PAT等更安全的层面并在首次认证后将凭据安全地保存到系统凭据库中后续 Git 命令自动复用。GCM 还是两个历史项目的继任者基于 .NET Framework 的 Git Credential Manager for Windowssrc/shared/Core/ 承载核心命令与抽象Atlassian.Bitbucket、GitHub、GitLab、Microsoft.AzureRepos分别是各托管平台的主机提供者实现入口程序位于 src/shared/Git-Credential-Manager/Program.cs。平台支持与功能矩阵GCM 目前可用于 Windows、macOS 和 Linux。它只处理 HTTP(S) 协议的远程仓库如果你使用 SSH 远程地址仍可继续使用 SSH 本身例如 Azure DevOps SSH、GitHub SSH、Bitbucket SSH。下表是 README 给出的完整功能矩阵| 功能 | Windows | macOS | Linux* | |-|:-:|:-:|:-:| | 安装/卸载程序 | ✔ | ✔ | ✔ | | 安全平台凭据存储详见 | ✔ | ✔ | ✔ | | Azure DevOps 多因素认证 | ✔ | ✔ | ✔ | | GitHub 双因素认证 | ✔ | ✔ | ✔ | | Bitbucket 双因素认证 | ✔ | ✔ | ✔ | | GitLab 双因素认证 | ✔ | ✔ | ✔ | | Windows 集成认证NTLM/Kerberos | ✔ |N/A|N/A| | Basic HTTP 认证 | ✔ | ✔ | ✔ | | 代理支持 | ✔ | ✔ | ✔ | |amd64支持 | ✔ | ✔ | ✔ | |x86支持 | ✔ |N/A| ✗ | |arm64支持 | best effort | ✔ | ✔ | |armhf支持 |N/A|N/A| ✔ |*GCM 仅保证对 dotnet 官方支持的 Linux 发行版 提供支持。需要注意的是Windows 集成认证WIA即 NTLM/Kerberos/Negotiate 的总称仅在 Windows 上可用。相关实现位于 src/shared/Core/Interop/Windows/其中的WindowsCredentialManager等类型封装了平台级凭据 API。支持的 Git 版本GCM 力求兼容尽可能广泛的 Git 版本但存在两个已知的不兼容情况Git 1.xGCM 不支持也不测试 Git 的初始大版本。Git 2.26.2该版本在解析凭据配置时引入了一个破坏性变更GCM 依赖该解析逻辑。此问题已在 Git 项目的提交12294990中修复并随Git 2.27.0发布。因此建议使用 Git 2.27.0 及以上版本。安装 GCM完整的分平台安装说明见 docs/install.md各平台推荐的安装方式标注如下。macOSHomebrew推荐brew install --cask git-credential-manager brew upgrade --cask git-credential-manager # 升级 brew uninstall --cask git-credential-manager # 卸载注意如果此前通过 Homebrew 安装过旧版 Java GCM安装时会被自动brew unlink git-credential-manager。macOS Package安装包下载安装包双击安装卸载运行sudo /usr/local/share/gcm-core/uninstall.sh。Linux重要所有 Linux 发行版都需要额外配置凭据存储详见 docs/credstores.mdGCM 在 Linux 上默认不带凭据存储。.NET tool推荐见下文「.NET tool」小节可在任意 .NET 官方支持的发行版上安装。Debian 包下载.deb包后执行sudo dpkg -i path-to-package git-credential-manager configure卸载git-credential-manager unconfigure后sudo dpkg -r gcm。校验包签名见 docs/linux-validate-gpg.md。Tarball解压到/usr/local/bin并配置tar -xvf path-to-tarball -C /usr/local/bin git-credential-manager configure源码安装脚本确保curl可用后执行curl -L https://aka.ms/gcm/linux-install-source.sh | sh git-credential-manager configureWindowsGit for Windows推荐GCM 已内置安装 Git for Windows 时会询问选择凭据助手GCM 是默认选项。独立安装下载独立安装包。警告在 Windows 上独立安装会强制覆盖 Git for Windows 内置的 GCM 版本即使内置版本更新。独立安装包有两种gcmuser-win*用户级无需管理员权限仅安装到当前用户并更新当前用户的 Git 配置gcm-win*系统级需要管理员权限安装到所有用户并更新系统级 Git 配置。卸载Windows 10 在「设置 → 应用」中卸载Windows 7-8.1 在控制面板「程序和功能」中移除。WSLGCM 可用于 Windows Subsystem for Linux详见 docs/wsl.md。.NET tool跨平台这是 Linux 上的首选安装方式也适用于 macOS需先安装 .NET SDK 并按要求将工具目录加入PATHdotnet tool install -g git-credential-manager git-credential-manager configure更新与卸载dotnet tool update -g git-credential-manager git-credential-manager unconfigure dotnet tool uninstall -g git-credential-manager对应的打包项目位于 src/shared/DotnetTool/。配置 GCM 为 Git 凭据助手GCM 只有在「安装且配置」后才会被 Git 调用。最直接的方式是git config --global credential.helper manager查看当前配置git config credential.helper从源码层面看configure/unconfigure命令src/shared/Core/Application.cs 中的IConfigurableComponent实现会操作credential.helper配置键。其逻辑要点包括支持--system参数以操作/etc/gitconfig系统级默认操作~/.gitconfig用户级会先在credential.helper中写入一个空值用于清除较低级别配置中的旧 helper再写入 GCM 可执行文件的路径在 Windows 上路径中的反斜杠会被替换为 UNIX 风格分隔符并对空格、括号等特殊字符做转义GetGitConfigAppPath方法。此外GCM 为dev.azure.comAzure Repos主机在安装后默认设置credential.useHttpPath true因为仅凭主机名不足以确定正确的 Azure 认证机构需要 URL 路径的一部分此时凭据按dev.azure.com/org-name形式存储。如需按完整路径存储应改用org-name.visualstudio.com形式的远程地址。如何使用 GCM安装并配置完成后GCM 由 Git 隐式调用无需用户手动操作也不应被用户直接调用。例如当向 Azure DevOps、Bitbucket 或 GitHub 执行git push时会自动弹出窗口引导完成登录不同 Git 主机的流程略有差异本地部署与云托管的 Git 主机之间也有差异。此后同一仓库中的 Git 命令会在凭据有效期内自动复用GCM 已存储的凭据或令牌。完整命令行用法见 docs/usage.mdgit credential-manager [command [args]]常用子命令--help/-h/-?列出可用命令--version显示当前版本get/store/erase与 Git 交互的核心命令通常由 Git 自动调用无需手动执行configure/unconfigure将 GCM 配置为凭据助手支持--systemazure-repos管理 Azure DevOps 组织/远程 URL 与用户账户的绑定关系及认证机构缓存详见 docs/azrepos-users-and-tokens.mdgithub管理 GitHub.com 与 GitHub Enterprise Server 上的账户。从源码看src/shared/Git-Credential-Manager/Program.cs 在启动时按HostProviderPriority.Normal注册AzureReposHostProvider、BitbucketHostProvider、GitHubHostProvider、GitLabHostProvider并以Low优先级注册GenericHostProvider通用提供者永远不会优先于特定提供者胜出。命令由 src/shared/Core/Application.cs 的RunInternalAsync组装内置get/store/erase/configure/unconfigure/diagnose命令--no-ui全局选项可禁用图形界面提示diagnose命令还聚合各提供者自带的诊断测试如 GitHubApiDiagnostic。GCM 同时集成了 TRACE2 追踪系统启动时写入版本与参数事件、结束时写入退出码。配置代理GCM 的网络操作支持代理。详见 docs/netconfig.md 的 HTTP 代理章节credential.httpProxy/GCM_HTTP_PROXY已被弃用应改用 Git 标准的http.proxy配置。注意credential.httpProxy只影响 GCM 自身Git 并不读取它。认证与多因素支持GCM 覆盖了三种主要的认证路径分别对应 src/shared/Core/Authentication/ 下的实现OAuth 认证OAuthAuthentication、OAuth2Client.cs支持授权码、设备码等流程GitHub、GitLab、Bitbucket 的浏览器/设备码登录即属此类Basic 认证BasicAuthentication用户名/密码或个人访问令牌Windows 集成认证WindowsIntegratedAuthenticationNTLM/Kerberos仅 Windows。Azure DevOps 多因素认证与 GitHub/Bitbucket/GitLab 双因素认证均通过 OAuth 流程实现。GitHub 的认证模式可配置为browser、device设备码、basic、pat等Bitbucket.org 的访问令牌每 2 小时过期过期后需用刷新令牌换取新令牌。Bitbucket 相关的这些行为可以通过credential.bitbucketAlwaysRefreshCredentials与credential.bitbucketValidateStoredCredentials调节详见 docs/configuration.md。凭据存储选型GCM 支持多种凭据存储后端默认值因平台而异详见 docs/credstores.md| 存储类型 | 平台 | 说明 | |-|-|-| |wincredman| Windows | 默认基于wincred.h的 Windows 凭据管理器网络/SSH 会话中不可用远程桌面不受影响 | |dpapi| Windows | DPAPI 加密文件默认存于%USERPROFILE%\.gcm\dpapi_store| |keychain| macOS | 默认macOS Keychain通常是login | |secretservice| Linux | freedesktop.org Secret Servicelibsecret需要图形会话| |gpg| macOS, Linux | GPG 加密文件与pass兼容默认存于~/.password-store需先用pass init gpg-id初始化 | |cache| macOS, Linux | Git 内建内存凭据缓存默认 900 秒适合 Cloud Shell 等临时环境 | |plaintext| 全平台 |明文文件不安全默认~/.gcm/store或%USERPROFILE%\.gcm\store| |none| 全平台 | 不存储透传/no-op适合串联其他凭据助手 |切换存储通过GCM_CREDENTIAL_STORE环境变量或credential.credentialStoreGit 配置实现例如git config --global credential.credentialStore gpg这些存储名称与 src/shared/Core/Constants.cs 中CredentialStoreNames常量一一对应wincredman/dpapi/keychain/gpg/secretservice/plaintext/cache/none各存储的具体实现位于 src/shared/Core/Interop/ 对应平台目录下如 WindowsCredentialManager.cs、MacOSKeychain.cs、GpgPassCredentialStore.cs、SecretServiceCollection.cs。使用gpg存储在无图形界面的 TTY 会话中时需配置 GPG Agent 的 pin-entry 程序如pinentry-tty/pinentry-curses并通过SSH_TTY或GPG_TTY$(tty)指定真实 TTY 设备路径/dev/tty无效。使用cache存储时可通过GCM_CREDENTIAL_CACHE_OPTIONS或credential.cacheOptions传入 Git 凭据缓存的选项如--timeout 300。常用配置与环境变量速查GCM 的配置遵循 Git 的配置层级规则local global system全部以credential为前缀并支持按 URL 作用域覆盖例如credential.microsoft.visualstudio.com.namespace比credential.visualstudio.com.namespace更具体。同时 GCM 识别一组专用的环境变量环境变量优先于配置项系统管理员还可以通过企业配置设置默认值。以下是 docs/configuration.md 中的高频项| 配置项 | 作用 | 默认值 | |-|-|-| |credential.interactive| 是否允许 GCM 与用户交互GUI/TTY 提示false/0禁用适合无人值守环境 | 启用 | |credential.trace/credential.traceSecrets/credential.traceMsAuth| 追踪日志路径写入文件true/1写入 stderr后两者需先启用 trace | 禁用 | |credential.debug| 启动时暂停等待调试器附加 | 禁用 | |credential.provider| 指定主机提供者auto默认按远程 URL 自动探测、azure-repos、github、bitbucket、gitlab、generic|auto| |credential.authority|已弃用请改用credential.provider迁移说明见 docs/migration.md |auto| |credential.guiPrompt| 是否允许 GUI 提示有等效终端提示时回退到终端 | 启用 | |credential.guiSoftwareRendering| 强制 GUI 软件渲染仅 WindowsWindows on ARM 默认启用以规避 Avalonia 问题 |false| |credential.allowUnsafeRemotes| 是否允许向不安全的远程如明文 HTTP发送凭据不建议开启 |false| |credential.autoDetectTimeout| 主机提供者自动探测的网络等待上限毫秒负值/零值禁用探测 | 2000 | |credential.allowWindowsAuth| 是否允许 Generic 提供者探测 WIANTLM/Kerberos仅 Windows |true| |credential.namespace| 凭据存储中的命名空间前缀格式{namespace}:{service}|git| |credential.credentialStore| 见上文凭据存储选型 | 平台相关 | |credential.msauthFlow| Microsoft 认证交互流程auto/embedded/system/devicecode|auto| |credential.msauthUseBroker实验性 | 使用操作系统账户管理器Windows Broker详见 docs/windows-broker.md |false| |credential.useHttpPath| 是否将完整仓库 URL 传给凭据助手源自 Git 本身Azure Repos 默认开启 |false| |credential.azreposCredentialType| Azure Repos 返回的凭据类型pat默认或oauth|pat| |credential.azreposManagedIdentity/credential.azreposWorkloadFederation*| Azure 托管标识与工作负载联合Workload Identity Federation认证详见 docs/azrepos-misp.md 与 docs/azrepos-wif.md | 未定义 |这些配置项在源码中的键名定义集中位于 src/shared/Core/Constants.cs 的GitConfiguration.Credential与EnvironmentVariables类中阅读该文件可对照验证每个设置项的准确名称与含义。附加资源与实验性功能完整用户文档索引见 docs/README.md涵盖常见问题 FAQ、配置、环境变量、企业配置、网络与 HTTP 配置、凭据存储、主机提供者规范、GitLab 支持、通用 OAuth 支持、NTLM/Kerberos 认证等。实验性功能Windows brokerdocs/windows-broker.md。路线图可通过 project roadmap 了解后续规划。参与贡献见 CONTRIBUTING.md项目遵循 CODE_OF_CONDUCT.md使用 GitHub 徽标时请遵守 GitHub logo guidelines。许可证本项目采用 MIT 许可证见 LICENSE。【免费下载链接】git-credential-managerSecure, cross-platform Git credential storage with authentication to GitHub, Azure Repos, and other popular Git hosting services.项目地址: https://gitcode.com/GitHub_Trending/gi/git-credential-manager创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考