21
5

More than 3 years have passed since last update.

cargoでfailed to authenticateになった時の対処法

Last updated at Posted at 2020-07-26

背景

気分転換にRustチュートリアルを始めてみたら初めての依存ライブラリー取得のところで以下のエラーが出て若干ハマったので対処法をメモしておく。

$ cargo build
    Blocking waiting for file lock on package cache
    Updating crates.io index
error: failed to get `rand` as a dependency of package `guessing_game v0.1.0 (/Users/xxx/rust/guessing_game)`

Caused by:
  failed to load source for dependency `rand`

Caused by:
  Unable to update registry `https://github.com/rust-lang/crates.io-index`

Caused by:
  failed to fetch `https://github.com/rust-lang/crates.io-index`

Caused by:
  failed to authenticate when downloading repository
attempted ssh-agent authentication, but none of the usernames `git` succeeded

Caused by:
  no authentication available

原因

cargoコマンドはデフォルトではssh-agentを使用して取得を試みるが、これがコケている。

解決法1: ssh-agentに鍵を登録する

こちらは正統派解決法で、普段使っている秘密鍵をそのまま登録すればOK。下記記事の手順通りにやればいいだけなので難しいことはないが解決法2と比べると若干めんどくさい。

ssh-agentを利用して、安全にSSH認証を行う

解決法2: コケた場合にOSのgitコマンドへフォールバックさせる

言うまでもないかもしれないが、前提条件としてgitコマンドが正しく動作していることが必要。

下記のオプションを入れるとssh-agentを使った認証にコケた場合、gitコマンドを使って取得を試みるように動作を変更することができる。この結果普段通り鍵認証を行うようになるので正しく認証完了しリポジトリを取得できるようになる。

※ファイルが無い場合は作成する

~/.cargo/config
[net]
git-fetch-with-cli = true

ワークアラウンド的なやり方だが、OSのgitコマンドと設定が共通になり多少楽な気がしたので今回私はこのやり方にした。

ダメだった解決法

エラーメッセージでググると以下のように書き換える記事がいくつか出てくるが、私の環境では解決できなかった。

~/.gitconfig
- [url "git@github.com:"]
+ [url "ssh://git@github.com/"]

参考文献

21
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
5