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