入门 The Cargo Team 2026-09-13 15:48:23 · 3 阅读

第73章 附录:Git 身份验证

Cargo 在使用 Git 依赖和注册表时支持部分身份验证。本附录介绍了如何配置 Git 认证以配合 Cargo 使用。

如果需要其他认证方式,可以将 net.git-fetch-with-cli 配置项设为启用,这样 Cargo 会调用 git 可执行文件来处理远程仓库拉取,而不是使用内置支持。也可以通过环境变量 CARGO_NET_GIT_FETCH_WITH_CLI=true 来启用该功能。

注意: 公共 Git 依赖不需要身份验证。如果在相关场景下遇到认证失败,请检查 URL 是否正确。

HTTPS 认证

HTTPS 认证需要 credential.helper 机制。有多种凭证助手可用,你可以在全局 Git 配置文件中指定使用哪一个。

# ~/.gitconfig

[credential]
helper = store

Cargo 不会提示输入密码,因此对于大多数助手,你需要在运行 Cargo 之前先为助手提供初始用户名和密码。一种做法是先对私有 Git 仓库执行 git clone 并输入用户名和密码。

提示:
macOS 用户可以考虑使用 osxkeychain 助手。
Windows 用户可以考虑使用 GCM 助手。

注意: Windows 用户需确保 sh Shell 位于 PATH 中。这通常包含在 Git for Windows 的安装中。

SSH 认证

SSH 认证需要 ssh-agent 正在运行以获取 SSH 密钥。请确保相关环境变量已设置(大多数类 Unix 系统为 SSH_AUTH_SOCK),并且正确的密钥已添加(使用 ssh-add)。

Windows 上可以使用 Pageant(PuTTY 的一部分)或 ssh-agent。 如果要使用 ssh-agent,Cargo 需要用到 Windows 自带的 OpenSSH,因为 Cargo 不支持 MinGW 或 Cygwin 所使用的模拟 Unix 域套接字。 关于在 Windows 上安装的更多信息,可参阅 Microsoft 安装文档密钥管理页面则介绍了如何启动 ssh-agent 以及添加密钥。

注意:Cargo 不支持 git 的简写 SSH URL(如 git@example.com:user/repo.git),请使用完整的 SSH URL,例如 ssh://git@example.com/user/repo.git

注意:Cargo 内置的 SSH 库不会使用 SSH 配置文件(如 OpenSSH 的 ~/.ssh/config)。如有更复杂的需求,应使用 net.git-fetch-with-cli

SSH Known Hosts

连接 SSH 主机时,Cargo 必须通过“known hosts”(即一组主机密钥的列表)来验证主机身份。Cargo 会在标准位置查找 OpenSSH 风格的 known_hosts 文件(家目录下的 .ssh/known_hosts,或类 Unix 平台上的 /etc/ssh/ssh_known_hosts,或 Windows 上的 %PROGRAMDATA%\ssh\ssh_known_hosts)。有关这些文件的更多信息,可参阅 sshd 手册页。此外,也可以在 Cargo 配置文件中通过 net.ssh.known-hosts 来配置密钥。

在 known_hosts 文件完成配置之前连接 SSH 主机时,Cargo 会显示一条错误提示,说明如何添加该主机密钥。提示中还会包含一个“指纹”,它是主机密钥的简短哈希值,通常更容易通过目测校验。服务器管理员可以运行 ssh-keygen 命令(例如 ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub)来提取公钥的指纹。知名网站可能会在网络上公布其指纹,例如 GitHub 就把自己的指纹发布在 https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints 上。

Cargo 已内置 github.com 的主机密钥。如果这些密钥发生变化,你可以将新密钥添加到配置文件或 known_hosts 文件中。

注意: Cargo 不支持 known_hosts 文件中的 @cert-authority@revoked 标记。如需使用此功能,请使用 net.git-fetch-with-cli。此外,当 Cargo 的 SSH 客户端表现与预期不符时,这也是一种有用的解决思路。

评论 (0)