Bitwarden CLI
Bitwarden(ビットウォーデン)は、暗号化された保管庫にウェブサイトの資格情報などを保存する、自由かつオープンソースのパスワードマネージャーである。クラウドでホストされるサービスと、オンプレミスでセルフホストする機能が提供されている。Webインターフェイス、デスクトップアプリ、ブラウザ拡張機能、モバイルアプリ、CLIなど、さまざまなクライアントアプリケーションがある。
(wikipediaより)
https://ja.wikipedia.org/wiki/Bitwarden
Bitwordenはオープンソースのパスワードマネージャで、WebサイトのログインID以外にも様々な資格情報の管理に利用できます。
Bitwarden CLIは、Bitwardenの資格情報の登録や閲覧をコマンドラインベースで行うためのツールです。
インストール方法
- 下記URLからダウンロードして、任意のフォルダに解凍します。
https://bitwarden.com/ja-JP/help/cli/#download-and-install - 解凍したフォルダの中には"bw.exe"のみが入っています。このフォルダへのパスを環境変数のPathへ登録しておきます。
Bitwarden CLIの使い方
Login
まずはBitwardenにログインする必要がありますが、少々面倒です。
> bw login
loginコマンドを実行すると、アカウント情報(Emailアドレス、パスワード、2段階認証コード(設定している場合))を聞かれるので入力します。
> bw login
? Email address: user@sample.com
? Master password: [input is hidden]
? Two-step login code: 433362
ログインに成功すると下記のテキストが表示され、セッションキーを環境変数に設定するよう指示されます。
You are logged in !
To unlock your vault, set your session key to the `BW_SESSION` environment variable. ex:
$ export BW_SESSION="hYAmUSkIKhjb1....."
> $env:BW_SESSION="hYAmUSkIKhjb1..."
そこでメッセージにある、環境変数に設定するコマンドをコピぺして実行します。
> $env:BW_SESSION="hYAmUSkIKhjb1..."
これでようやくBitwarden操作ができるようになります。
> bw list items
[{"object":"item","id":"09b2e0c3-c806-4860-....."},{...}]
> bw get password Qiita
hogehogefugafuga
Unlock
ログインと同時に保管庫がアンロックされセッションキーが発行されますが、セッションキーには有効期限があり、しばらくすると環境変数に設定したセッションキーは無効となり保管庫がロックされてしまいます。
その場合には、unlockコマンドを使って再度セッションキーを発行する必要があります。
> bw unlock
セッションキーが無効となっただけで、ログイン状態は保たれていますので、ここではパスワードの入力のみとなります。
> bw unlock
? Master password: [hidden]
Your vault is now unlocked!
To unlock your vault, set your session key to the `BW_SESSION` environment variable. ex:
$ export BW_SESSION="/PC2hfmQBPxmG..."
> $env:BW_SESSION="/PC2hfmQBPxmG..."
You can also pass the session key to any command with the `--session` option. ex:
$ bw list items --session /PC2hfmQBPxmG...
ここで表示されたセッションキーを再度、環境変数に設定します。
> $env:BW_SESSION="/PC2hfmQBPxmG..."
ちなみに、セッションが切れた状態でコマンドを実行しようとすると、毎回パスワードの入力を要求されます。
> bw list items
? Master password: [hidden]
ログインまわりの処理をまとめる
login、unlockまわりの操作をもうちょっと簡素化できないか(特に環境変数に設定するセッションキーをコピペする辺り)という事で、PowerShellの関数を作ってみました。
関数の内容は下記コード内のコメントをご確認ください。
<#
.SYNOPSIS
bitwarden CLIのセッションを開始します。
.Description
bitwarden CLI で保管庫をアンロックし、発行されたセッションキーを環境変数に設定します。
#>
function Start-BwSession {
# bitwardenのステータスを取得
$status = bw.exe status | ConvertFrom-Json
$session = $null
# 未ログインの場合
if ($status.status -eq "unauthenticated") {
Write-Host "bitwardenにloginします"
$session = bw.exe login
}
# ロック状態の場合
elseif ($status.status -eq "locked") {
Write-Host "保管庫をUnlockします"
$session = bw.exe unlock
}
# ログイン済みの場合は何もしない
# login、unlock成功時
if ($null -ne $session) {
# login、unlockから帰ってくる文字列から、セッションキーのみを取り出す
$key = $session`
| Where-Object { $_.StartsWith("> `$env:BW_SESSION=") } `
| Foreach-Object { $_.Replace("> `$env:BW_SESSION=", "").Trim('"') }
# 環境変数にセッションキーを設定する
$env:BW_SESSION = $key
Write-Host "セッションキーを環境変数にセットしました"
}
Write-Host "準備完了です"
}
この関数を、PowerShellのプロファイルに書き込んでおくと、PowerShell起動時に自動で読み込まれるので便利です。
プロファイルの場所は変数 $profile
で確認できます。
> $profile
C:\Users\username\ドキュメント\PowerShell\Microsoft.PowerShell_profile.ps1
実行例
未ログイン時
> Start-BwSession
bitwardenにloginします
? Email address: user@sample.com
? Master password: [hidden]
? Two-step login code: 218397
セッションキーを環境変数にセットしました
準備完了です
ログイン済み、保管庫ロック時
> Start-BwSession
mac failed.
保管庫をUnlockします
? Master password: [hidden]
セッションキーを環境変数にセットしました
準備完了です
ログイン済み、保管庫アンロック済み
> Start-BwSession
準備完了です