Git 身份验证

在使用 git 依赖项和注册表时,Cargo 支持某些形式的身份验证。此附录包含一些有关如何设置 Git 身份验证以使其与 Cargo 配合使用的信息。

如果您需要其他身份验证方法,可以设置 net.git-fetch-with-cli 配置值,以使 Cargo 执行 git 可执行文件来处理远程仓库的获取,而不是使用内置支持。可以使用 CARGO_NET_GIT_FETCH_WITH_CLI=true 环境变量启用此功能。

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,例如 [email protected]:user/repo.git。请使用完整的 SSH URL,例如 ssh://[email protected]/user/repo.git

注意: Cargo 的内置 SSH 库不使用 SSH 配置文件(例如 OpenSSH 的 ~/.ssh/config)。更高级的要求应使用 net.git-fetch-with-cli

SSH 已知主机

连接到 SSH 主机时,Cargo 必须使用“已知主机”(即主机密钥列表)来验证主机的身份。Cargo 可以在其标准位置(您的主目录中的 .ssh/known_hosts,或类 Unix 平台上的 /etc/ssh/ssh_known_hosts,或 Windows 上的 %PROGRAMDATA%\ssh\ssh_known_hosts)中查找这些 OpenSSH 样式的 known_hosts 文件中的已知主机。有关这些文件的更多信息,请参见 sshd 手册页。或者,可以使用 net.ssh.known-hosts 在 Cargo 配置文件中配置密钥。

在连接到尚未配置已知主机的 SSH 主机时,Cargo 将显示一条错误消息,指示您如何添加主机密钥。这还包括一个“指纹”,它是主机密钥的较小哈希值,应该更容易进行视觉验证。服务器管理员可以通过对公钥运行 ssh-keygen 来获取指纹(例如,ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub)。著名的站点可能会在 Web 上发布其指纹;例如,GitHub 将其发布在 https://githubdocs.cn/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 客户端的行为不符合您的预期,这也是一个很好的提示。