1Password CLIから指紋認証でパスワードやOTPを取得する方法について。
1Password CLIは使ったことがなく、Your CLI wish is our command 🪄💫 | 1Passwordを見て興味を持ち、セットアップしたらとても便利だった。
セットアップ手順
1. 1Passwordのセットアップ
まず https://1password.com/downloads/mac/ 1Password 8以上のデスクトップアプリをインストールする*1。
2022-03-28時点でApp Storeや brew install 1password
では7系しかインストールできない。かつ、macOSの1Password 8はbeta扱いなので画面下のほうにある以下のリンクからダウンロードする。
インストールした1Passwordを起動してログインしておく。
2. 1Password CLIのセットアップ
https://developer.1password.com/docs/cli/get-started を参考にすればよい。一応手順を書く。
1Password CLI v2以上をインストールする。
https://1password.com/downloads/command-line/ からダウンロードしてもいいし、brew install 1password-cli
してもよい。brewでもv2をインストールできる。
インストールしたらCLIからアカウントを追加する。
$ op account add Enter your sign-in address (example.1password.com): Enter the email address for your account on <sign-in address>: Enter the Secret Key for <email address> on <sign-in address>: Enter the password for <email address> at <sign-in address>:
Vaultにある 1Password Account (<username>)
に書いてある内容を移せばOK。
項目 | 入力事項 |
---|---|
sign-in address | 個人アカウントなら大抵は my.1password.com でよいはず |
email address | (1Passwordアカウントのメールアドレス) |
Secret Key | (1PasswordアカウントのSecret Key) |
password | (1Passwordアカウントのパスワード) |
$ eval $(op signin) Enter the password for <email address> at <sign-in address>:
account add
してもアカウントを追加しただけでsign inはできていないため、このコマンドでsign inする必要がある。ちなみに1Passwordに設定した期間で強制sign outされる。
3. 指紋認証を有効化する
1Passwordのデスクトップアプリで以下の手順を行うことで、パスワード認証ではなく指紋認証でsign inできる。
1Password > Preferences
で設定モーダルを開くDeveloper > 1Password CLI 2
にあるBiometric unlock for 1Password CLI
にチェックを入れる
試しにOTP取得してみる
上記のセットアップが完了していれば以下のコマンドにて、1Passwordへの指紋認証を経て各種itemのパスワードやOTPなどを取得することができる。
$ op item get my-item --otp
このOTPをパイプで流し込んだり、aliasを登録しておくとCLIでの多要素認証の手数が減る*2。Your CLI wish is our command 🪄💫 | 1Passwordにあるように環境変数を流し込むようなこともできる。
コマンドについて
op item get { <itemName> | <itemID> } --otp
1Passwordに登録されたitemの情報を取得するコマンド。
itemNameに空白等が入っていてCLIとかで扱いにくいな〜ってときにItemIDが使える。
itemIDは op item list
や op item get
で確認できる。
$ op item list ID TITLE VAULT EDITED 2nkisfqj3bh2tb6soowptfkooa my-item Personal 3 years ago
--otp
でOTP文字列を返す。OTP以外のフィールドも取り出し放題で、他にも様々なオプションがあるのでリファレンス参照。