Использование кошелька KDE для аутентификации вызова монтирования

Я использую команду, подобную следующей, для монтирования некоторых общих ресурсов Samba NAS в моей системе Kubuntu 18.04:

sudo mount -t cifs -o "username=MyUser" //MyServer/MyFolder ~/SharedFolders/MyFolder

Это отлично работает. Однако он каждый раз запрашивает пароль. Я хотел бы использовать кошелек паролей KDE (или аналогичный агент) для аутентификации.

Я хочу, чтобы пароль запрашивался в графическом интерфейсе один раз, а затем его нужно было постоянно хранить и повторно использовать для будущих вызовов mount .

Возможно ли что-то подобное с креплением ?

Если нет, есть ли в KDE автоматизированная альтернатива?

0
задан 9 November 2019 в 01:36

1 ответ

Невозможно указать mount, какую программу использовать для хранения/чтения паролей, но есть несколько инструментов KDE, которые можно комбинировать для автоматизации процесса.

Для хранения/чтения паролей: kwalletcli
Для запроса пароля графического интерфейса: kdialog
Вы сможете установить их с помощью менеджера пакетов.

Я написал скрипт, который делает это (с несколькими дополнительными опциями). Он должен делать все, что вы просили: если пароль не существует, отображается приглашение графического интерфейса (если доступно), а пароль сохраняется в кошельке для последующего использования.

Вы можете снова обновить пароль из командной строки с помощью kwalletcli, но единственный способ, которым я смог их удалить, — это приложение KWalletManager GUI.

Вот сценарий от 22 августа 2020 г.:

#!/bin/sh

usage() {
    echo "Usage: $0 [-u username] [-o options] share mount"
    echo
    echo "Defaults for optional parameters:"
    echo
    echo "  username:  the output of 'id -un', i.e. the current user"
    echo "  options:   defaults,uid=1000,gid=1000,iocharset=utf8"
    echo "             Pass an empty string to clear default options"
    exit 2
}

while getopts "u:o:" opt; do
    case "$opt" in
        u) USERNAME="$OPTARG" ;;
        o) OPTIONS="$OPTARG" ;;
        *) usage ;;
    esac
done
shift $((OPTIND-1))

[ "$#" -ne 2 ] && usage

# Mount settings
USERNAME="${USERNAME:-$(id -un)}"
OPTIONS="${OPTIONS-defaults,uid=1000,gid=1000,iocharset=utf8}"
SHARE="$1"
MOUNT="$2"

# Wallet settings
FOLDER="CIFS credentials"
ENTRY="$USERNAME@${SHARE#//}"

read_password() {
    PASS_PROMPT="Password for $USERNAME@${SHARE#//}: "

    if command -v kdialog >/dev/null 2>&1; then
        PASSWORD="$(kdialog --password "$PASS_PROMPT")"
    else
        # from https://stackoverflow.com/a/28393320/6702490
        trap 'stty echo' EXIT
        stty -echo
        printf "%s" "$PASS_PROMPT"
        read -r PASSWORD
        printf "\n"
        stty echo
        trap - EXIT
    fi
}

if ! PASSWORD="$(kwalletcli -f "$FOLDER" -e "$ENTRY" 2>/dev/null)"; then
    if read_password && [ -n "$PASSWORD" ]; then
        kwalletcli -f "$FOLDER" -e "$ENTRY" -p "$PASSWORD"
    else
        echo "Empty/no password entered, skipping writing password to wallet and mount."
        exit 1
    fi
fi

sudo mount -t cifs -o "${OPTIONS}${OPTIONS:+,}username=$USERNAME,password=$PASSWORD" "$SHARE" "$MOUNT"

Примечание: использование kwallet-query было бы лучшим вариантом, так как он поставляется в комплекте с KDE/kwallet и поддерживает кошельки не по умолчанию, но Я не смог заставить его сохранить пароль. Никаких ошибок и ненулевого кода выхода не было, но пароль не записывался в кошелек.

3
ответ дан 22 August 2020 в 13:07

Другие вопросы по тегам:

Похожие вопросы: