背景
気分転換に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と比べると若干めんどくさい。
解決法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/"]