1Password CLIのログイン操作でSecretKey等をhistoryへ残さない様にしてやってみる
1Passwordはログイン情報、特にパスワードの安全管理において頼り甲斐のあるアプリケーションです。ただ、実際のログイン操作で若干手間を感じることもあります。
1Passwordには公式のCommandLine Toolが存在しており、うまく使う事でターミナルから素早く認証コードを取得することもできます。
1Password command-line tool: Getting started
ですが、historyの設定次第ではSecret KeyとMaster Passwordの入力がログに残っていたりします。macOS上でhistoryの設定に関して弄らずに、1Password-CLIログイン操作後Secret KeyとMaster Passwordがhistoryへ残らないようにする方法についてまとめてみました。
目次
1Password-CLIのインストール
今回はHomeBrew経由でのインストールにしました。
% brew cask install 1password-cli % brew install gpg
パスワードを直接入力せずにログインセッションを生成する
こちらの記事を参考にしつつ操作していきます。
via: Kanasansoft Web Lab. 環境変数にIDやPASSWORDを設定しなければならない状況で、ID/PASSWORDをファイルに平文で保存したりシェルの履歴に残したくない
暗号化用関数の設定
参考サイトより、secenv関数を.zshrc
辺りに追加します。
secenv() { file=~/.secret_environment_value if [ $# -eq 0 ]; then `gpg <$file` fi if [ $# -eq 1 ]; then `gpg -c --output $file $1` fi }
キーとパスワードの暗号化
1password-CLIのログインには以下の要素が必要となります。
- Login Domain
- Mail Address
- Secret Key
- Master Password
これらの情報をテキストデータへ入力し、それを暗号化していきます。
% vim env.txt export login_domain=my.1password.com export [email protected] export secret_key=XXXX-XXXX-XXXX-XXXX export master_password=xxxxxxxxxxxxxx % secenv env.txt
secenv env.txt
を入力した際に暗号化のパスワードを求められますが、環境によっては盛大に文字化けします。
ですが、カーソルはパスワード入力欄にフォーカスされているため、そのまま入力してEnterを押します。確認のダイアログも同じく操作します。
以下の出力が表示されたことを確認できたら、env.txtを削除します。
gpg: *警告*: コマンドが指定されていません。なにを意味しているのか当ててみます ... gpg: AES暗号化済みデータ gpg: 1 個のパスフレーズで暗号化
1Password-CLIへのログイン
暗号化した環境変数を読み込みます。暗号化時のパスワードが求められます。
% secenv
次にMasterPasswordをクリップボードへコピーします。
% echo $master_password | pbcopy
最後に、ログインコマンドを入力します。
% op signin $login_domain $mail_address $secret_key Enter the password for [email protected] at my.1password.com: # Command-Vでクリップボードの中身を貼り付けます。 export OP_SESSION_my="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # This command is meant to be used with your shell's eval function. # Run 'eval $(op signin my)' to sign into your 1Password account. # If you wish to use the session token itself, pass the --output=raw flag value.
あとは1Password-CLIの各種操作となります。
まとめ
1Password-CLIを知ったものの、平文でhistoryにKey類が残る状態となることを知り、それらを回避するために始めた内容でした。ただ、正直「そこまでする価値はあるのか」という思いも頭によぎりました。
ですが、実際に一通りこなしてみると、ワンタイムパスワードの自動生成等の比較的CLIに頼りたくなる場面にて大きな効果が出てきます。パイプラインでの利用等、応用の幅はあると思いますので、気になる方は試してみてはいかがでしょうか。