べにやまぶろぐ

技術寄りの話を書くつもり

GitLab で Access denied となって git clone ができなくなったときは authroized_keys をチェックしよう

GitLab に登録していた deploy key である日突然 clone が効かなくなりました。

エラーの内容は GitLab というか Git のレポジトリ運用してたらトラウマになるこれ↓

Access denied.
fatal: Could not read from remote repository.

ssh git@xxx.xxx.xxx.xxx は通るので疎通はできてるってとこまで確認はできたけど相変わらず情報少なくてわからないので gitlab-shell のログを見ると

W, [2014-07-18T19:42:22.375123 #21456]  WARN -- : gitlab-shell: Access denied for git command <git-upload-pack 'xxxx/yyyyyy.git'> by user with key key-142.

E, [2014-07-18T19:46:09.013765 #21608] ERROR -- : API call <GET http://xxx.xxx.xxx.xxx//api/v3/internal/allowed?action=git-upload-pack&ref=_any&project=xxxx%2Fyyyyy&forced_push=false&key_id=142> failed: 404 => <{"message":"404 Not found"}>.

となっていてなんか鍵がはじかれていそうなことはわかる。

しかしこの鍵、以前問題なく使えていた。

うーんと思っていろいろ調べているとここのコメントに

Then I manually cleared ssh keys sudo -u git -H bin/gitlab-keys clear, deleted from web page, rebooted and added again and it started to work!

なんてことが書いてあるのを発見。gitlab-keys clear ってどうやら gitlab の authroized_keys を全削除するっぽい(=登録している鍵が全部無効になりそう)のでちょっと無理っすということで authroized_keys を開いてみると、はじかれる鍵はそろって複数のエントリーが登録されているのに気づきました。

そこで古い方の鍵のエントリーを削除して最新のものだけ残したところちゃんと clone できるように。どうも違うユーザー名義で同じ鍵を登録したり付け替えたりしてるとエントリーがだぶって clone や pull 時に無効になってしまう様子。