2012/12/26

gitolite で誤った公開鍵を設定して gitolite-admin を push してしまった時の対処

gitolite を、某所で導入しているのですが、先日やらかしてしまったことを...

gitolite といえば、git リポジトリをたくさん作って管理するのにとても最適なソリューションなわけですが、公開鍵の設定とかも gitolite-admin というリポジトリを使って設定するようになってるんですよね。

この前、公開鍵の設定をするときに少しミスってしまいました。
keydir/user_name.pub に公開鍵を設定するのですが、複数の鍵をこのファイルに入れられると思っていたのですよね。

しかし、そううまくはいきませんでした。
$ git push
Counting objects: 9, done.
Delta compression using up to 3 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 1.56 KiB, done.
Total 5 (delta 0), reused 0 (delta 0)
remote: Already on 'master'
remote: WARNING: a pubkey file can only have one line (key); ignoring foo.pub
remote: WARNING: a pubkey file can only have one line (key); ignoring bar.pub
というわけでダメみたいです。
gitolite は、authorized_keys と違って、ひとつのファイルにひとつの鍵しか入れられないみたいです。
WARNING を出してきたくせに、reject されませんでしたが、もう一度修正して push してみると...
$ git push
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
(ノ∀`)アチャー

試しに root でログインして、/var/lib/gitolite/repositories/gitolite-admin.git を直接 clone して見ましたが、push しようとすると...
# git push -f

Counting objects: 10, done.
Delta compression using up to 3 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 1.75 KiB, done.
Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
remote: Use of uninitialized value in do "file" at hooks/update line 36.
remote: Null filename used at hooks/update line 36.
remote: error: hook declined to update refs/heads/master
To /var/lib/gitolite/repositories/gitolite-admin.git
 ! [remote rejected] master -> master (hook declined)
error: failed to push some refs to '/var/lib/gitolite/repositories/gitolite-admin.git'
(ノ∀`)アチャー

と思っていたのですが、救いの手がちゃんと用意されていました。
# su - gitolite
$ cd .ssh
$ ls
authorized_keys  known_hosts  old_authkeys
ちゃんと一つ前の公開鍵がここに設定されているんですよね。
これを書き戻すだけでどうにかアクセスできるようになりました。
$ cp old_authkeys authorized_keys
めでたしめでたし。

0 件のコメント: