В данной статье мы рассмотрим как максимально безопасно настроить автоматическую разблокировку SSH-ключей при входе в систему на примере графической среды KDE Plasma и дистрибутива Fedora.
Введение
Для автоматической разблокировки SSH-ключей многие пользователи отключают их парольную защиту, что является в корне неверным, т.к. если злоумышленник сможет получить доступ к данному ничем не защищённому файлу, он также обретёт его и ко всем ресурсам, к которым открывается доступ соответствующим ключом.
Для хранения пароля закрытой части ключа мы будем использовать системную связку используемой графической среды. Таким образом, файл на диске будет храниться в зашифрованном виде, автоматически разблокируется при входе пользователя в систему и будет безопасно загружен в ssh-agent.
Подготовка связки паролей
Сначала установим пакет pam-kwallet, предоставляющий набор PAM-компонентов для поддержки Бумажника KDE:
sudo dnf install pam-kwallet
Откроем настройки связки ключей при помощи следующих действий: Главное меню – Компьютер – Параметры системы – группа Предпочтения пользователя – Бумажник.
Настройки бумажника KDE
На вкладке Параметры бумажника убедимся, что установлен флажок в чекбоксе Использовать бумажник KDE, а в группе Закрытие бумажника все флажки сняты.
Контроль доступа к бумажника KDE
Переключимся на вкладку Контроль доступа и установим флажок Запрашивать подтверждение при обращении приложений к бумажнику. Это значительно усилит безопасность: каждое приложение будет запрашивать авторизацию у пользователя.
Нажмём сначала кнопку Применить для сохранения внесённых изменений, а после этого – Запустить управление бумажниками.
Управление бумажником KDE
В появившемся Управление бумажниками нажмём кнопку Сменить пароль и установим такой же пароль, как тот, что используется при входе в систему.
Нажмём OK и Сохранить, затем выйдем и повторно войдём в систему, либо перезагрузим компьютер.
Устанавливаем и настраиваем ksshaskpass
Установим пакет ksshaskpass, включающий утилиту интеграции с KDE Wallet:
sudo dnf install ksshaskpass
Настраиваем Plasma версии до 5.20 (включительно)
Создаём ярлыки для разблокировки ключей
Создадим каталог для пользовательских ярлыков автоматически загружаемых приложений (если он отсутствует):
mkdir -p ~/.config/autostart
В любом текстовом редакторе создадим ярлыки для автоматической разблокировки необходимых SSH-ключей (по одному для каждого SSH-ключа).
Листинг файла ksshaskpass1.desktop для ключа ~/.ssh/id_rsa (стандартный RSA):
[Desktop Entry]
Name[ru_RU]=Добавление SSH ключа 1
Name=Add SSH key 1
GenericName[ru_RU]=Добавление SSH ключа 1
GenericName=Add SSH key 1
Comment[ru_RU]=Добавление SSH ключа 1
Comment=Add SSH key 1
Exec=env SSH_ASKPASS="/usr/bin/ksshaskpass" /usr/bin/ssh-add $HOME/.ssh/id_rsa < /dev/null
Icon=gcr-key
MimeType=
StartupNotify=false
Terminal=false
TerminalOptions=
Type=Application
Categories=Network;Internet;
X-DBUS-ServiceName=
X-DBUS-StartupType=none
X-KDE-SubstituteUID=false
X-KDE-Username=
При необходимости повторим действие для всех оставшихся.
Листинг файла ksshaskpass2.desktop для ключа ~/.ssh/id_ed25519 ( ED25519).
[Desktop Entry]
Name[ru_RU]=Добавление SSH ключа 2
Name=Add SSH key 2
GenericName[ru_RU]=Добавление SSH ключа 2
GenericName=Add SSH key 2
Comment[ru_RU]=Добавление SSH ключа 2
Comment=Add SSH key 2
Exec=env SSH_ASKPASS="/usr/bin/ksshaskpass" /usr/bin/ssh-add $HOME/.ssh/id_ed25519 < /dev/null
Icon=gcr-key
MimeType=
StartupNotify=false
Terminal=false
TerminalOptions=
Type=Application
Categories=Network;Internet;
X-DBUS-ServiceName=
X-DBUS-StartupType=none
X-KDE-SubstituteUID=false
X-KDE-Username=
Если несколько SSH-ключей имеют одинаковый пароль, то их допускается указать в одном ярлыке через пробел, однако мы настоятельно рекомендуем для каждого устанавливать свой собственный.
Настраиваем автоматическую разблокировку
Откроем параметры автозапуска KDE при помощи Главное меню – Компьютер – Параметры системы – группа Рабочая среда – Запуск и завершение – страница Автозапуск.
Управление автозагрузкой в KDE
Нажмём кнопку Добавить… (Add…) выберем Добавить приложение (Add application), найдём на диске созданные desktop-файлы, затем нажмём OK.
Повторим действие для всех SSH-ключей и убедимся, что все они появились в списке, в разделе Applications.
Перейдём в каталог ~/.config/autostart и запустим каждый созданный ярлык напрямую хотя бы один раз, введём пароль разблокировки закрытого ключа, разрешим сохранение его в бумажнике KDE, а затем в появившемся окне, запрашивающим доступ, нажмём кнопку Разрешать всегда.
Настраиваем Plasma версии 5.22 и выше
Внимание! В Plasma 5.21 ни один из способов работать не будет из-за отсутствия systemd-юнита для kwallet-pam и вызываемого этим состояния гонки.
Минимально необходимая версия Plasma – 5.22.5.
Создаём пользовательский systemd-юнит
Создадим каталог для хранения пользовательских systemd-юнитов (при отсутствии):
mkdir -p ~/.config/systemd/user
Сбросим для него контекст SELinux:
restorecon -Rv ~/.config/systemd/user
Создадим юнит для автоматической разблокировки ключей ~/.config/systemd/user/ssh-add.service:
[Unit]
Description=Add SSH keys
After=plasma-kwallet-pam.service
[Service]
Type=oneshot
ExecStart=/usr/bin/ssh-add %h/.ssh/id_rsa %h/.ssh/id_ed25519
Environment="SSH_ASKPASS=/usr/bin/ksshaskpass"
[Install]
WantedBy=graphical-session.target
Перезагрузим конфигурацию пользовательских юнитов:
systemctl --user daemon-reload
Настраиваем автоматическую разблокировку
Запустим созданный сервис один раз вручную, введём пароль разблокировки закрытого ключа, разрешим сохранение его в бумажнике KDE, а затем в появившемся окне, запрашивающим доступ, нажмём кнопку Разрешать всегда:
systemctl --user start ssh-add.service
Активируем автоматический запуск при каждом входе в систему:
systemctl --user enable ssh-add.service
Завершение
Настройка завершена. Если всё сделано верно, при следующем входе в систему разблокировка будет произведена автоматически.
Литература
При написании данной статьи использовалась литература из следующих источников: