以前から CLI で Authy と共通の MFA Token を生成する でトークンを生成してたんですが、トークンが欲しい時は大抵 Web サービスを利用しているときや awscli で Enter MFA Code:
と聞かれたときであり、いちいち CLI で生成するのが面倒です。
Mac でおなじみの高機能ランチャー Alfred の Workflow(有料オプション)を使えば柔軟な機能定義ができるので、Alfred Workflow で MFA Token を簡単に生成できるようにしました。半年以上自分の環境で運用していたのですが、こなれてきたので晒します。
類似の workflow が既にあったのですが、シークレットキーを平文で管理したくなかったので、CLI で Authy と共通の MFA Token を生成する で行った手法と同じ方法で暗号化しています。
生成したトークンはクリップボードにコピーされるのと同時に、直前のウィンドウに自動的にペーストされるので、awscli のように Terminal でトークンを求められる場合でも快適に使えます。
機能
-
mfa SERVICE
と入力することで、登録したサービスがインクリメンタルサーチされます。- 実際にはサービス一覧を grep しているので、部分マッチします。
- 生成したトークンは、クリップボードに入るのと同時に直前のウィンドウのカーソル位置に自動ペーストされます。
- 各サービスのトークン生成に必要なシークレットキーは、OpenSSL の RSA キーで暗号化して保持しています。
- ですので、トークン生成のたびにパスフレーズの入力が必要になります。
- データ+暗号化キーの初期化、サービスの追加・削除も Alfred 経由で可能です。
事前準備
利用するには、oath-toolkit のインストールが必要です。
oathtool というコマンドで HTOP/TOTP Token が生成可能になります。
Homebrew でさくっとインストールしましょう。
brew install oath-toolkit
Terminal で oathtool と入力し、ヘルプが表示されればインストール OK です。
workflow のインストール
以下のページから workflow を取得してインストールしてください。
使い方
初回は RSA キーの初期化が必要です。
Alfred のウィンドウで mfa init
と入力し、初期化処理を行ってください。
キーを作成する際のパスフレーズを聞かれますので、お好きなものを入力してください。
この後登録する各サービスのシークレットキーを暗号化するためのものです。
サービスの追加
Alfred のウィンドウで mfa add サービス名 シークレットキー
と入力することで、新規のサービスを追加できます。
シークレットキーは基本的には MFA 登録時の QR コードが表示されたタイミングでしか取得できませんが、Authy を使っている方は、後から無理矢理シークレットキーを抜き出すことが出来ます。
CLI で Authy と共通の MFA Token を生成する を参考にしてください。
トークンの生成
Alfred のウィンドウで mfa サービス名
でインクリメンタルサーチができます。
サービス名の一部でもマッチします。
直近で利用したサービスが上位に来るようにリストを自動調整しています。
サービスの削除
Alfred のウィンドウで mfa rm サービス名
と入力することで、既存のサービスを削除できます。
おまけ
生成されるリストや暗号化の手法は CLI で Authy と共通の MFA Token を生成する と同じなので、記事中の mfacodegen
コマンドで workflow で管理しているファイルをそのまま利用できます。
参照するデータのパスを変える必要はありますが。