それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

機密passwordを安全に保存する。コマンドで使う。保存する。keyringコマンド

開発用パスワード・キーの管理をしたい

env.txt だとか .git/config とか .gitconfig とか、パスワードとAPIキーが散らばる。どこかに保存したい。

keyring コマンドで管理する。

linux には keyring コマンドがある。これを使うと機密な文字列をマスターパスワードで管理できる、

インストール

Ubuntu Desktopなどは最初から入っている。(apt install python3-keyring )

コマンドからだけ使う場合には、次のコマンドをつかう

apt install python3-keyrings.alt

python3-keyring は保存先の設定が必要でDesktopならGNOMEキーリングになるのだが、ServerやMinmalはそれらを扱えないので、暗号化ファイルをバックエンドに使う。

バックエンド

バックエンドは、OSに依存する安全な保存先が使われる。alt を使った場合は暗号化ファイルになる。

macOSならKeychainなど、WindowsならCredentialsなどが選ばれる。それ以外もプラグインを使えば使える。

バックエンドを未設定ならエラーになる。

私が試したときには次のようなエラーになった。

keyring set system username
Password for 'username' in 'system':
Traceback (most recent call last):
  File "/usr/bin/keyring", line 33, in <module>
    sys.exit(load_entry_point('keyring==22.0.1', 'console_scripts', 'keyring')())
  File "/usr/lib/python3/dist-packages/keyring/cli.py", line 135, in main
    return cli.run(argv)
  File "/usr/lib/python3/dist-packages/keyring/cli.py", line 68, in run
    return method()
  File "/usr/lib/python3/dist-packages/keyring/cli.py", line 85, in do_set
    set_password(self.service, self.username, password)
  File "/usr/lib/python3/dist-packages/keyring/core.py", line 60, in set_password
    get_keyring().set_password(service_name, username, password)
  File "/usr/lib/python3/dist-packages/keyring/backends/fail.py", line 25, in get_password
    raise NoKeyringError(msg)
keyring.errors.NoKeyringError: No recommended backend was available. Install a recommended 3rd party backend package; or, install the keyrings.alt package if you want to use the non-recommended backends. See https://pypi.org/project/keyring for details.

パスワードを保存する

初回起動の場合はマスターパスが必要。

takuya@raspi-ubuntu:~$ keyring set system username
Password for 'username' in 'system': 保存したいパスワード
Please set a password for your new keyring: マスタ・パスワード
Please confirm the password: マスタ・パスワード

2回目以降はパスワードだけを保存する。

takuya@raspi-ubuntu:~$ keyring get system username
Please enter password for encrypted keyring:
password

保存するパスワードに「確認」がないのでミスタイプをしないように注意する。

保存したパスワードを確認

確認は、取得コマンドで行える。

keyring get system username

取得コマンドを使うと、ターミナルに表示されるので取り扱いには注意する。

pbcopy や /dev/nullをつかっていい感じに画面に表示させないように使う。

keyring get system username | pbcopy >/dev/null

windowsで使う場合。

これは、嬉しいことにWindowsでも使える。

python.exe -m pip pip install keyring

Power Shellで保存する。

windowsに保存したパスワードの例

WindowsではスタートメニューからCredentials を検索して

Windows Credentials Lockerを選んで

中身をみるとパスワードが保存されている。

Windows credentials は「ウインドウズ・資格情報」という面倒な日本語訳でとても検索しにくいためでしょうか、まったく情報がありません。Windows Credentialをキーチェインの代わりに使えないかと探していたらKeyringを見つけました。

WindowsはデフォルトでKeyringコマンドを搭載するべきだと思う。

Cmd.exe/PowerShell からは使えるが、MinGw/Cygwinからは使えない。WSL(v1)からは使える。Windows Logon情報と連携しないためだろうか。

バックエンドをBitwardenなどに

バックエンドをBitwardenなどのパスワード・マネージャーにすることもできる。

できるけど、bw-cli だけで事足りるので不要である。

セキュリティに関する愚痴

パスワード管理ソフトを課金するくらいならWindows資格情報を使えばいいし、公開鍵をZipパスワードで保護するような無意味なことをやってないで、ss-agentを使えばいいし。macOS keychains みたいにWindowsCredentialsをSSH-AGENTで使えたらいいのにね。