问题描述
在使用rust 的过程中,有时候会依赖一些公司内部,或者私有的代码仓库,这时候,通常需要使用ssh认证,才能正常拉取仓库代码,但是有时候会遇到 Cargo 无法拉取代码的情况,看起来像是 ssh 认证失败导致的无法拉取代码,报错如下:
rust
代码解读
复制代码
Updating git repository `ssh://git@git.yourcompany.com/your-team/your-repo` error: failed to get `private-crate` as a dependency of package `your-project v0.1.0 (/path/to/your-project)` Caused by: failed to load source for dependency `private-crate` Caused by: Unable to update ssh://git@git.yourcompany.com/your-team/your-repo Caused by: failed to fetch into: /Users/yourusername/.cargo/git/db/your-repo-xxxxxx Caused by: failed to authenticate when downloading repository * attempted ssh-agent authentication, but no usernames succeeded: `git` if the git CLI succeeds then `net.git-fetch-with-cli` may help here https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli Caused by: no authentication methods succeeded
问题原因
默认新情况下,cargo使用内置的 libgit2 来拉取 git 依赖,而非系统自带的 git 命令行工具进行依赖拉取,libgit2 对 SSH 认证幼体套独立的实现,所以可能无法直接复用本地对ssh的配置,ssh-agent 环境变量 以及 SSH 密钥设置。
这就可能导致一个现象:正常使用 git clone 可以拉取到项目代码,但是 rust-analyzer 却总是报错无法拉取依赖,ssh 认证失败等问题。
解决方案
在你的项目中,添加 .cargo 文件夹,并在文件夹中创建 config.toml 文件,
bash
代码解读
复制代码
your-project/ ├─ .cargo/ │ └─ config.toml └─ Cargo.toml
在config.toml 文件中添加以下配置
toml
代码解读
复制代码
[net] git-fetch-with-cli = true
就可以让 cargo 使用本机已安装的 git 命令行工具拉取配置,从而与手动拉取配置一样,正常获取到依赖。
验证
最后重启代码编辑器vscode,或者运行cargo b 进行验证,会发现问题已解决。Pomelo_刘金,转载请注明链接,感谢!