はじめに
1PasswordをCLIで使用する方法について記載します。
もともと、GUIでは1Password、CLIではPassを使用していたのですが、分かれているの嫌だなと思い、今回1Passwordに統一しました。
インストール
パッケージマネージャーを使用しないでのインストールは以下になります。
ARCH="amd64"; \
OP_VERSION="v$(curl https://app-updates.agilebits.com/check/1/0/CLI2/en/2.0.0/N -s | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+')"; \
curl -sSfo op.zip \
https://cache.agilebits.com/dist/1P/op2/pkg/"$OP_VERSION"/op_linux_"$ARCH"_"$OP_VERSION".zip \
&& unzip -od /usr/local/bin/ op.zip \
&& rm op.zip
私の場合は、インストールをMakefileでおこなっているので次のように定義しています。
ARCH := $(shell uname -m)
BIN_DIR := $(HOME)/.local/bin
COMPLETION_DIR := $(HOME)/.local/share/zsh-completion/completions
$(BIN_DIR)/op:
mkdir -p /tmp/op
$(eval DL_ARCH := $(shell if [ "$(ARCH)" = "x86_64" ]; then echo "amd64"; else echo "arm64"; fi))
$(eval VERSION := $(shell curl https://app-updates.agilebits.com/check/1/0/CLI2/en/2.0.0/N -s | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+'))
curl -fsLS -o /tmp/op/op.zip https://cache.agilebits.com/dist/1P/op2/pkg/v$(VERSION)/op_linux_$(DL_ARCH)_v$(VERSION).zip
unzip /tmp/op/op.zip -d /tmp/op
mv /tmp/op/op $(BIN_DIR)/op
rm -rf /tmp/op
$(BIN_DIR)/op completion zsh > $(COMPLETION_DIR)/op.zsh
※ インストールと合わせて入力補完用ファイルの生成も合わせておこなっています。
サービスアカウントの発行
CLIからでもID/Passwordでのサインインが可能ですが、都度パスワードの入力を求められてしまうので、サービスアカウントを発行して使用しています。
- 1Passwordにログイン
- サイドバーから「Developer Tools」を選択
- 「Directory」タブを選択し、「Service Account」を選択
- 「Service account name」に任意の名前を入力
- 「Choose vaults」から参照するVaultを選択
- DefaultのVaultを指定することはできなので、CLI用のVaultを作成するのが良いかと思います。
- 「Service account token」が発行されるので記録しておいてください
使ってみる
まずは、サインインの設定です。
whoamiコマンドで情報が取得できればサインインできています。
# 環境変数にサービスアカウントトークンを設定
$ export OP_SERVICE_ACCOUNT_TOKEN=${Service account token}
# サインインアカウントの情報を確認
$ op whoami
URL: https://your_url
Integration ID: your_integration_id
User Type: SERVICE_ACCOUNT
Vaultの一覧表示
$ op vault list
ID NAME
xxxxxxxxxxxxxxxxxxxxxxxxxx CLI
保存されているアイテム一覧
$ op item list
ID TITLE VAULT EDITED
yyyyyyyyyyyyyyyyyyyyyyyyyy ChatGPT API Key CLI 4 minutes ago
特定のアイテムを取得
$ op item get oom2m6lj676ll6axyeyfag6p24 --vault CLI
ID: yyyyyyyyyyyyyyyyyyyyyyyyyy
Title: ChatGPT API Key
Vault: CLI (xxxxxxxxxxxxxxxxxxxxxxxxxx)
Created: 8 minutes ago
Updated: 6 minutes ago by miya10kei
Favorite: false
Version: 2
Category: LOGIN
Fields:
password: [use 'op item get yyyyyyyyyyyyyyyyyyyyyyyyyy --reveal' to reveal]
※ アイテムを取得する場合は--vault
オプションを付与して取得先のVaultを指定してください
フィールドを絞りたい場合
$ op item get oom2m6lj676ll6axyeyfag6p24 --vault CLI --fields password --reveal
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
※ パスワードフィールドの場合は--reveal
オプションを付与することで確認可能です