op(1password CLI tool)のトークンをキャッシュする
はじめに
opは1PasswordのCLIツールで簡単なセットアップでCLIから1Passwordの機能を利用可能です。opで各種の操作を行うにはsignin
コマンドで取得できるトークンが必要ですがこのトークン自体を管理する機能はopにはありません。そこで取得したトークンをキャッシュするラッパーツールを作成してみました。
opc
作成したツール(opc)のコードはGitHubで公開しています。
使い方は以下の通りです。ACCOUNT
にはop signin list
で表示されるアカウント名を指定します。
USAGE: opc [FLAGS] <ACCOUNT> FLAGS: -h, --help Prints help information --refresh force refresh token cache -V, --version Prints version information ARGS: <ACCOUNT> Name of account (see output of `op signin list`)
基本的な使用例と挙動
opcを実行すると1Passwordのマスターパスワードの入力を求められます。ここで入力したパスワードはopへそのままパイプされます。パスワードの検証ができたらopから出力されたトークンをそのまま出力します。
> opc my_account Enter the password for your_name@example.com at my.1password.com: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX <- トークン
opcを実行すると$HOME/.config/opc/cache.toml
にトークンがキャッシュされます。現状トークンは平文で保存されるのでファイルの扱いには注意してください。
>ls -l ~/.config/opc Permissions Size User Date Modified Name .rw------- 78 sasaki.kazuhiro 28 6 18:34 cache.toml
キャッシュのTTLは30分でこの期間内に再度opcを実行した場合はキャッシュからトークンを読んで表示します。
応用例
OTPの取得
opと組み合わせて使うことでOTPをCLIで取得できます。以下の例では1Passwordのエントリentry_name_of_1password
に保存されているOTPを取得します。
#!/bin/bash OP_TOKEN=`opc your_account` op get totp --session "$OP_TOKEN" "entry_name_of_1password" | tr -d '\n'
aws-vaultと組み合わせてマネジメントコンソールへログインする
OTPの取得スクリプトをaws-vaultと組み合わせてOTPが必要なプロファイルでマネジメントコンソールへのログインを行うこともできます。
#!/bin/bash if [ $# -ne 1 ]; then echo "no profile specified" 1>&2 exit 1 fi aws-vault login -t `get-otp` "$1"
まとめ
opのトークンをキャッシュする小さなツールを作ってみました。