git-cryptを導入したときの備忘録

秘密鍵の管理

私の場合は、あくまで個人なのでチームでリポジトリを管理したり共有するというニーズはない。githubはdotfilesの保存場所としていつでもリストアできるようにという目的で使っている。

自宅で固定で使うメイン機から git pushし、外出で持ち歩くためのサブ機は git pullしてメイン機のクローンとして使うというような運用である。以下に記録した方法は邪道的ではあるけれども当面は許容願いたい。私自身のスキルが成長してもっと安全でまともな手法が見つかれば改善していくつもりだ。

秘密鍵のBackupと復元

gnupgをインストールして秘密鍵を作成すると、~/.gnupgというデレクトリが生成されて秘密鍵が保存される。本来ならこれをUSBメモリとかに保存しておくのが良いのだと思うが、私の場合は手っ取り早くDropboxにコピーしておき、クリーンインストールしたりするときにシンボリックリンクを張るようにした。

サブ機の場合は、別ユーザーとして秘密鍵のエクスポート/インポートするという仕組みが正しいのだともうけれど面倒なのでこちらもメイン機同様にDropboxに保存されたメイン機の ~/.gnupgをそのままコピーして使います。

サブ機でgpg化したファイルを復号するときにもパスフレーズを聞かれるので入力すれば問題なく複合できます。ただし、

gpg: *警告*: homedir '/home/<user>/.gnupg'の安全でない許可

のような警告が出たら、該当のディレクトリを他人に読めない設定にします。(上の例なら chmod 700 /home//.gnupg)

git-cryptの導入

以下の手順で進めればうまくいくことが確認できた。大事なのは順番を間違えないこと!

  1. dotfilesのデレクトリで git crypt initすると、.gitに git-cryptが追加される。
  2. つづいてユーザーを登録 git crypt add-gpg-user <秘密鍵に登録したメールアドレス>とすると dotfilesデレクトリに .git-cryptが生成されて秘密鍵がコピーされている。
  3. 次に暗号化したいファイルに対して.gitattributesを作成してこれを先に Git comitt & pushしておく。ここが大事!
  4. つづいて暗号化したいファイルを git commit & pushする。(4.と5.を同時にcommit すると暗号化されずに公開されてしまうので注意!)
  5. githubのdotfilesリポジトリを開いて当該ファイルが View rawという表示になって非公開になっていることを確認する。
  6. 最後に適当なtempデレクトリに git cloneしたのち、git-crypt unlockとすると秘密鍵のパスフレーズを聞かれるので入力して完了すると暗号化されたファイルが複合されるているので確認する。

参考にしたTips