Я использую команду, подобную следующей, для монтирования некоторых общих ресурсов Samba NAS в моей системе Kubuntu 18.04:
sudo mount -t cifs -o "username=MyUser" //MyServer/MyFolder ~/SharedFolders/MyFolder
Это отлично работает. Однако он каждый раз запрашивает пароль. Я хотел бы использовать кошелек паролей KDE (или аналогичный агент) для аутентификации.
Я хочу, чтобы пароль запрашивался в графическом интерфейсе один раз, а затем его нужно было постоянно хранить и повторно использовать для будущих вызовов mount
.
Возможно ли что-то подобное с креплением
?
Если нет, есть ли в KDE автоматизированная альтернатива?
Невозможно указать 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 и поддерживает кошельки не по умолчанию, но Я не смог заставить его сохранить пароль. Никаких ошибок и ненулевого кода выхода не было, но пароль не записывался в кошелек.