Git 认证
Cargo 在使用 Git 依赖和注册表时支持某些形式的认证。本附录包含一些关于如何设置与 Cargo 协同工作的 Git 认证的信息。
如果你需要其他认证方法,可以将 net.git-fetch-with-cli
配置值设置为让 Cargo 执行 git
可执行文件来处理远程仓库的抓取,而不是使用内置支持。这可以通过设置环境变量 CARGO_NET_GIT_FETCH_WITH_CLI=true
来启用。
注意: Cargo 不需要对公共 Git 依赖进行认证,因此如果你在这种情况下看到认证失败,请确保 URL 正确。
HTTPS 认证
HTTPS 认证需要 credential.helper
机制。有多种 credential helper,你可以在你的全局 Git 配置文件中指定要使用哪一个。
# ~/.gitconfig
[credential]
helper = store
Cargo 不会要求输入密码,因此对于大多数 helper,你需要在运行 Cargo 之前向 helper 提供初始的用户名/密码。一种方法是运行 git clone
克隆私有 Git 仓库并输入用户名/密码。
提示
macOS 用户可以考虑使用 osxkeychain helper。
Windows 用户可以考虑使用 GCM helper。
注意: 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 手册页中找到。另外,也可以使用 net.ssh.known-hosts
在 Cargo 配置文件中配置密钥。
在配置已知主机之前连接到 SSH 主机时,Cargo 将显示错误消息,指导你如何添加主机密钥。这还包括一个“指纹 (fingerprint)”,它是主机密钥的较小哈希值,更容易进行视觉验证。服务器管理员可以通过对公钥运行 ssh-keygen
来获取指纹(例如,ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
)。知名网站可能会在网上发布其指纹;例如,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 客户端行为与你预期不符,这也是一个很好的提示。