この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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 mail_address=xxxxx@xxxxxx.zzz
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 xxxxx@xxxxxx.zzz 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に頼りたくなる場面にて大きな効果が出てきます。パイプラインでの利用等、応用の幅はあると思いますので、気になる方は試してみてはいかがでしょうか。