【chezmoi】dotfileのセキュアな値をdashlaneから参照できるようにする
はじめに
chezmoiを使うまでワイはdotfileを公開していませんでした。
というのも、GitHub CLIで使うパーソナルアクセストークンをベタガキしていたりと「わざわざあげるのもなー」と思っていたからです。
この度Discordのコミュニティでchezmoiを教えてもらいなんやかんやで念願のdotfileを公開できるようになりました。🎉
セキュアな値を載せずにgit管理できるのでchezmoi便利↓
chezmoiそのものについては下記の記事で分かりやすくまとめている方がいるので詳しく知りたい方は見て見てみるといいかも知れません。
記事では1passwordで使っていましたがワイはdashlaneを使っているので、
今回はchezmoiとdashlane-cliを使い、dashlaneに保存したパスワードをdotfileで使えるようにします。
dashlane cliのインストール
dashlaneのパスワードを取得するためにcliツールをインストールします。
brewでインストールできます。
brew install dashlane/tap/dashlane-cli
インストールができたら、dcliコマンドが使えるようになるので、ログインしていきます。
dcli sync
dashlaneに登録しているメールアドレスを入力し、メールアドレス宛に送られるコードを入れ、パスワードを入力すれば完了です。Successfully syncedと表示されたらok
テンプレートファイルの作成
chezmoiを使ってパスワードマネージャーから値を取得して展開させて使うにはテンプレートファイルに記載する必要があるためまずテンプレートファイルを作成します。
作成方法
~/.zshrc
の部分は自分がテンプレートファイルにしたいパスを書いてください。
やり方は公式から引用。
テンプレートにしておらず、またchezmoidで管理していない場合
chezmoi add --template ~/.zshrc
すでに管理しているがテンプレートになっていない場合
chezmoi chattr +template ~/.zshrc
Dashlaneでパスワードの取得・設定
使うパスワードはweb、アプリなど好きな方法でdashlaneにパスワードを保存してください。
後述するchezmoiのdashlanePassword
ではdashlane上で項目名という名前を探すようになっているため、赤丸で記している項目名はできる限り一意に特定できる名前がいいと思います。
今回パスワードはDashlane上で "example-test-dashlane" として作成しました。
また、パスワードに保存している値がdotfileで展開される値になります。
dashlane cliで保存したパスワードが取得できるか確認する
新しくパスワードを保存したり変更した場合は、sync
コマンドを使用してください。
sync
コマンドは、ログインだけではなくweb等でdashlaneのパスワードを追加・変更した際に同期する役割も持っています。
下記のコマンドを入力して先ほど作成した example-test-dashlaneが取得できることを確認します。
$ dcli password --output json "example-test-dashlane"
検索に引っかかるとこんなふうにJsonが返ってきます。
{
"id": "{0A58A0AB-3134-4618-A413-D263D56116D9}",
"anonId": "{61D54392-3A95-47CA-97A0-8081AC4655BD}",
"creationDatetime": "1693814579",
"lastBackupTime": "0",
"lastUse": "1693814579",
"localeFormat": "UNIVERSAL",
"userModificationDatetime": "1693814579",
"autoLogin": "true",
"autoProtected": "false",
"checked": "false",
"login": "example-user",
"password": "password",
"status": "ACCOUNT_NOT_VERIFIED",
"strength": "0",
"subdomainOnly": "false",
"title": "example-test-dashlane",
"url": "https://example.com",
"userSelectedUrl": "https://example.com",
"useFixedUrl": "true",
"linkedServices": "{\"associated_domains\":[]}",
"modificationDatetime": "1693814579"
}
dashlane cliではfilterする時はデフォルトだとtitle
かurl
で検索するみたいです。
値が返ってくることがわかれば、テンプレートに書き込んでいきます。
テンプレートに書いていく
dashlaneのパスワードをchezmoiで展開するにはdashlanePassword
を使います。
書き方例
{{ (index (dashlanePassword "filter") 0).password }}
テンプレートファイル内で、パスワードの値を展開したい場所に書いてください。
冒頭のものを再度載せるのですがこんな感じです。
例でfilter
と書かれている箇所に、先ほどの example-test-dashlaneを入れます。
{{ (index (dashlanePassword "example-test-dashlane") 0).password }}
変更を適用する
そのままだとまだdotfileで展開されないため変更をapply
して反映させます。
$ chezmoi apply -v
変更反映の際、dashlaneからパスワードが取得され、ファイルにテンプレート記法で書いていた部分が値に変換され入力されていたら成功です。
おわり
公式ドキュメントのfilterが具体的に何を指しているのかが分からず、またテンプレートファイルに記載していなかったため結構な時間詰まってしまったので記事を書いてみました。
私と同じように詰まっている人の助けになれば幸いです。
Discordでエンジニアとゆるく繋がるコミュニティ作ってるのでよかったらきてください。たまにボイチャしてダラダラ喋ったり、雑談したりしてます。
基本どなたでも歓迎ですのでツイッターのプロフに貼っているリンクから飛んでください。
見学もご自由にどうぞー。
それでは、お疲れ様でした👋。
Discussion