1Password Cliの使い方
1Password Cliのサインイン方法を全く覚えられないのでメモ。
How to Install
via Homebrew for macOS
brew cask install 1password-cli
で入ります。
$ brew cask info 1password-cli
1password-cli: 0.5.7
https://support.1password.com/command-line/
/usr/local/Caskroom/1password-cli/0.5.7 (2 files, 10.1MB)
From: https://github.com/Homebrew/homebrew-cask/blob/master/Casks/1password-cli.rb
==> Name
1Password CLI
==> Artifacts
op (Binary)
from Zip archive
Linux 向けに Zip アーカイブも提供されており、展開して出てきた op
ファイルを PATH が通ったところに置くだけです。
バイナリぽん置き大好き!
https://app-updates.agilebits.com/product_history/CLI
mazgi on early-times in ~
❯ file op_linux_amd64_v0.6.2.zip
op_linux_amd64_v0.6.2.zip: Zip archive data, at least v2.0 to extract
mazgi on early-times in ~
❯ unzip -l op_linux_amd64_v0.6.2.zip
Archive: op_linux_amd64_v0.6.2.zip
Length Date Time Name
--------- ---------- ----- ----
9003392 09-23-2019 13:31 op
566 09-23-2019 13:32 op.sig
--------- -------
9003958 2 files
How to Sign-in
1Password の Cli である op
コマンドを --help
付きで実行するとこういうメッセージが表示されます。
$ op signin --help
usage: op signin <signinaddress> <emailaddress> <secretkey> [--output=raw]
「shell の履歴に <secretkey>
が残るのはいやだなぁ」って思いますよね。
実は"1Password command-line tool: Getting started“をみると email まで入れればいいことがわかります。
実際に試すとこんな感じ。
$ op signin my your-email@example.com
Enter the Secret Key for your-email@example.com at my.1password.com: ********
Enter the password for your-email@example.com at my.1password.com:
export OP_SESSION_my="********"
# This command is meant to be used with your shell's eval function.
# Run 'eval $(op signin my)' to sign into your 1Password account.
# If you wish to use the session token itself, pass the --output=raw flag value.
password
以外の情報は 1Password GUI の Preferences > Accounts
で確認できます(macOS の場合)。
以降は op signin <subdomain>
を eval するだけで使えます。
$ eval $(op signin my)
Enter the password for your-email@example.com at my.1password.com:
$OP_SESSION_my
が export されていればよいということですね。
Session tokens expire after 30 minutes of inactivity, after which you’ll need to sign in again.
と書かれているので 30 分経つと再度 sign-in が必要なようです。
How to Get my secrets
次に Item の取得方法です。
Password などテキスト情報
仮に Password を生成して Cli から取得してみます。
生成された Password は [WXjMEZyK7ABDEbid6J+wcwc
です。
op get item
するとこんな感じで色々含まれた JSON が返ってきます。
$ op get item dummy-password | jq .
{
"uuid": "********",
"templateUuid": "005",
"trashed": "N",
"createdAt": "2019-07-07T17:47:16Z",
"updatedAt": "2019-07-07T17:47:16Z",
"changerUuid": "********",
"itemVersion": 1,
"vaultUuid": "********",
"details": {
"password": "[WXjMEZyK7ABDEbid6J+wcwc",
"sections": [
{
"name": "linked items",
"title": "Related Items"
}
]
},
"overview": {
"ainfo": "Jul 8, 2019 2:47:16",
"pbe": 126.09859470409585,
"pgrng": true,
"ps": 100,
"title": "dummy-password"
}
}
のでこんな感じで取り出せます。
$ op get item dummy-password | jq --raw-output '.details.password'
[WXjMEZyK7ABDEbid6J+wcwc
ファイル
次にファイルです。
こんな感じでダミーの PNG ファイルを用意して 1Password に登録します。
$ convert -size 400x400 xc:white dummy.png
$ convert dummy.png -gravity Center -pointsize 96 -annotate 0 'sample' dummy.png
$ file dummy.png
dummy.png: PNG image data, 400 x 400, 8-bit grayscale, non-interlaced
$ shasum dummy.png
46d1200fb4decde6fb8cf0c83c794f0182c06025 dummy.png
op get document
するとバイナリが返ってきます。
$ op get document dummy.png | od -cx | head
0000000 211 P N G \r \n 032 \n \0 \0 \0 \r I H D R
5089 474e 0a0d 0a1a 0000 0d00 4849 5244
0000020 \0 \0 001 220 \0 \0 001 220 \b \0 \0 \0 \0 245 324 i
0000 9001 0000 9001 0008 0000 a500 69d4
0000040 020 \0 \0 \0 004 g A M A \0 \0 261 217 \v 374 a
0010 0000 6704 4d41 0041 b100 0b8f 61fc
0000060 005 \0 \0 \0 c H R M \0 \0 z & \0 \0 200
0005 0000 6320 5248 004d 7a00 0026 8000
0000100 204 \0 \0 372 \0 \0 \0 200 350 \0 \0 u 0 \0 \0 140
0084 fa00 0000 8000 00e8 7500 0030 ea00
なので任意の Path に保存します。
$ export OUT=$(mktemp)
$ op get document dummy.png > $OUT
$ file $OUT
/var/folders/fy/x8tlg_js6fz8xk0gpxlwfm_r0000gn/T/tmp.nh8WNiUq: PNG image data, 400 x 400, 8-bit grayscale, non-interlaced
ちゃんとファイルを取り出せました。
$ shasum dummy.png $OUT
46d1200fb4decde6fb8cf0c83c794f0182c06025 dummy.png
46d1200fb4decde6fb8cf0c83c794f0182c06025 /var/folders/fy/x8tlg_js6fz8xk0gpxlwfm_r0000gn/T/tmp.nh8WNiUq