4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Bitwarden CLIのログインを簡単にするPowerShellスクリプト

Posted at

Bitwarden CLI

Bitwarden(ビットウォーデン)は、暗号化された保管庫にウェブサイトの資格情報などを保存する、自由かつオープンソースのパスワードマネージャーである。クラウドでホストされるサービスと、オンプレミスでセルフホストする機能が提供されている。Webインターフェイス、デスクトップアプリ、ブラウザ拡張機能、モバイルアプリ、CLIなど、さまざまなクライアントアプリケーションがある。
(wikipediaより)
https://ja.wikipedia.org/wiki/Bitwarden

Bitwordenはオープンソースのパスワードマネージャで、WebサイトのログインID以外にも様々な資格情報の管理に利用できます。
Bitwarden CLIは、Bitwardenの資格情報の登録や閲覧をコマンドラインベースで行うためのツールです。

インストール方法

  1. 下記URLからダウンロードして、任意のフォルダに解凍します。
    https://bitwarden.com/ja-JP/help/cli/#download-and-install
  2. 解凍したフォルダの中には"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
bitwardenloginします
? Email address: user@sample.com
? Master password: [hidden]
? Two-step login code: 218397
セッションキーを環境変数にセットしました
準備完了です

ログイン済み、保管庫ロック時

> Start-BwSession
mac failed.
保管庫をUnlockします
? Master password: [hidden]
セッションキーを環境変数にセットしました
準備完了です

ログイン済み、保管庫アンロック済み

> Start-BwSession
準備完了です
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?