web-dev-qa-db-ja.com

スクリプトで使用するために、ターミナルのキーリングからパスワードを取得するにはどうすればよいですか?

コンピューターにLUKS暗号化されたドライブがある場合、NautilusまたはNemoは、Devicesの下に小さなロックのあるドライブとして表示されます。

クリックすると、パスワードを入力する必要があります。 remember this password foreverを選択すると、キーリングに保存されます。次回起動時にドライブをクリックすると、すぐにマウントされます。

端末からパスフレーズがキーリングに保存されているドライブを「すぐにマウント」するにはどうすればよいですか?ログイン時にLUKSドライブをマウントする自動起動スクリプトが必要です。パスフレーズをスクリプトに保存したくありません。キーリングのパスフレーズを使用します。

Passwords And Keysにアクセスすると、名前のないキーがたくさんあります。プロパティには、gvfs-luks-uuid=xxxxxxxxxxxxなどの説明と、LUKSドライブのパスワードがあります。これはUbuntuが使用するものです。

私が考えたオプションの1つはpython-gnomekeyringですが、キー名とパスワードしか取得できません。キー名は常に空であるため、特定のuuidのパスワードを取得するには、GUIで「技術的詳細」と呼ばれるものが必要です。

25
Redsandro

唯一の答えはpythonによるものだと思いますが、物事を難しくする2つのバグがあります。

  1. 他のアプリケーションが使用する詳細を識別することはpythonで利用できないため、キー名を手動で指定する必要があります(タツノオトシゴ:説明)版。ここにバグレポートを作成しました: https://bugs.launchpad.net/ubuntu/+source/gnome-python-desktop/+bug/1144781
  2. LUKSキーの特定の場合、これらの説明はタツノオトシゴでは空ですが、空の説明を変更すると実際にキーの名前が変更されるため、Pythonで検索できます。ここにバグレポートを作成しました: https://bugs.launchpad.net/ubuntu/+source/seahorse/+bug/11447

スクリプトとキーリングを使用している場合、これらのバグもあなたに影響を与えることを述べてください。

python部分については、以下に例を示します。

#!/usr/bin/env python

import gnomekeyring as gk

keyring = 'login'
keyItems = gk.list_item_ids_sync(keyring)

for keyItem in keyItems:
    key = gk.item_get_info_sync(keyring, keyItem)
    if  key.get_display_name() == 'KeyName you are looking for':
        # Your script here using key.get_secret()
        print "Password:", key.get_secret()

他の方法を知っている場合、例えば単純なbashコマンドを使用して、お知らせください。

9
Redsandro

secret-tools を使用して、キーリングからパスワードを保存および取得できます。

新しいパスワードを保存するには:

secret-tool store --label='Password for mydrive' drive mydrive

キーリングを確認してみましょう。検索するには(このコマンドはスクリプトに簡単に挿入できます):

secret-tool lookup drive mydrive
27
Aurelien

Python Keyring Lib を使用します

シェルスクリプトで使用するための便利なCLIがあります。

Installation

pip install keyring

キーの設定と取得

$ keyring set system username
Password for 'username' in 'system':
$ keyring get system username
password
2
HarlemSquirrel