0

我试图弄清楚如何使用从密钥环获取密码dbus-send,但我很难理解会话参数是什么。

这是我必须要做的:

#!/bin/bash

# Find key path
KEY_PATH=$(dbus-send --dest=org.freedesktop.secrets --print-reply=literal /org/freedesktop/secrets org.freedesktop.Secret.Service.SearchItems dict:string:string:"mount-point","/home/s/.mozilla/firefox" | grep -Eo '/\S+')
# Unlock keyring
RESULT=$(dbus-send --dest=org.freedesktop.secrets --print-reply=literal /org/freedesktop/secrets org.freedesktop.Secret.Service.Unlock array:objpath:$KEY_PATH | grep -Eo '/\S+')

# If unlocked...
if [ "$RESULT" = "$KEY_PATH" ]; then
    # Get password
    PASSWORD=$(dbus-send --dest=org.freedesktop.secrets --print-reply=literal /org/freedesktop/secrets org.freedesktop.Secret.Service.GetSecrets array:objpath:$KEY_PATH objpath:<WHAT IS SESSION?>)
    # Mount ecryptfs firefox directory
    echo $PASSWORD | ecryptfs-simple -o key=passphrase,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_passthrough=no,ecryptfs_enable_filename_crypto=yes,no_sig_cache=yes /home/s/.mozilla/.firefox-ecryptfs /home/s/.mozilla/firefox
    firefox $@
fi

我不知道如何获得一个会话来获取密码。

4

1 回答 1

1

需要使用以下命令创建会话:

org.freedesktop.Secret.Service.OpenSession (
    IN String algorithm,
    IN Variant input,
    OUT Variant output,
    OUT ObjectPath result);

https://specifications.freedesktop.org/secret-service/latest/re01.html

这是创建非加密会话的示例。请注意,返回的密码GetSecret将是纯文本,因为它使用非加密会话:

dbus-send --dest=org.freedesktop.secrets --print-reply=literal /org/freedesktop/secrets org.freedesktop.Secret.Service.OpenSession string:plain variant:string:''

输出是创建会话的 objpath:

variant          /org/freedesktop/secrets/session/s31

然后,理论上,您可以将会话传递给GetSecrets. 例如:

dbus-send --dest=org.freedesktop.secrets --print-reply=literal /org/freedesktop/secrets org.freedesktop.Secret.Service.GetSecrets array:objpath:/org/freedesktop/secrets/collection/login/6 objpath:/org/freedesktop/secrets/session/s31

注意:/org/freedesktop/secrets/collection/login/6是返回的对象路径SearchItems

但是,这不适用于 dbus-send。我认为这是因为会话可能会在 dbus-send 返回后立即关闭。

如果您使用 d-feet,会话将保留到 d-feet 窗口关闭。因此,您将能够使用 d-feet 获取密码。但是,我知道你想自动化它。

我建议您使用 python3 的密钥环,它提供使用加密会话获取密码。

于 2021-01-11T17:50:42.540 回答