Разблокируем SSH-ключи при входе в систему

В данной статье мы рассмотрим как максимально безопасно настроить автоматическую разблокировку SSH-ключей при входе в систему на примере графической среды KDE Plasma и дистрибутива Fedora.

Введение

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

Для хранения пароля закрытой части ключа мы будем использовать системную связку используемой графической среды. Таким образом, файл на диске будет храниться в зашифрованном виде, автоматически разблокируется при входе пользователя в систему и будет безопасно загружен в ssh-agent.

Подготовка связки паролей

Сначала установим пакет pam-kwallet, предоставляющий набор PAM-компонентов для поддержки Бумажника KDE:

sudo dnf install pam-kwallet

Откроем настройки связки ключей при помощи следующих действий: Главное менюКомпьютерПараметры системы — группа Предпочтения пользователяБумажник.

Настройки бумажника KDEНастройки бумажника KDE

На вкладке Параметры бумажника убедимся, что установлен флажок в чекбоксе Использовать бумажник KDE, а в группе Закрытие бумажника все флажки сняты.

Контроль доступа к бумажника 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 ключа 1Name=Add SSH key 1GenericName[ru_RU]=Добавление SSH ключа 1GenericName=Add SSH key 1Comment[ru_RU]=Добавление SSH ключа 1Comment=Add SSH key 1Exec=env SSH_ASKPASS=»/usr/bin/ksshaskpass» /usr/bin/ssh-add $HOME/.ssh/id_rsa < /dev/nullIcon=gcr-keyMimeType=StartupNotify=falseTerminal=falseTerminalOptions=Type=ApplicationCategories=Network;Internet;X-DBUS-ServiceName=X-DBUS-StartupType=noneX-KDE-SubstituteUID=falseX-KDE-Username=

При необходимости повторим действие для всех оставшихся.

Листинг файла ksshaskpass2.desktop для ключа ~/.ssh/id_ed25519 (ED25519).

[Desktop Entry]Name[ru_RU]=Добавление SSH ключа 2Name=Add SSH key 2GenericName[ru_RU]=Добавление SSH ключа 2GenericName=Add SSH key 2Comment[ru_RU]=Добавление SSH ключа 2Comment=Add SSH key 2Exec=env SSH_ASKPASS=»/usr/bin/ksshaskpass» /usr/bin/ssh-add $HOME/.ssh/id_ed25519 < /dev/nullIcon=gcr-keyMimeType=StartupNotify=falseTerminal=falseTerminalOptions
=Type=ApplicationCategories=Network;Internet;X-DBUS-ServiceName=X-DBUS-StartupType=noneX-KDE-SubstituteUID=falseX-KDE-Username=

Если несколько SSH-ключей имеют одинаковый пароль, то их допускается указать в одном ярлыке через пробел, однако мы настоятельно рекомендуем для каждого устанавливать свой собственный.

Настраиваем автоматическую разблокировку

Откроем параметры автозапуска KDE при помощи Главное менюКомпьютерПараметры системы — группа Рабочая средаЗапуск и завершение — страница Автозапуск.

Управление автозагрузкой в 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 keysAfter=plasma-kwallet-pam.service[Service]Type=oneshotExecStart=/usr/bin/ssh-add %h/.ssh/id_rsa %h/.ssh/id_ed25519Environment=»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

Завершение

Настройка завершена. Если всё сделано верно, при следующем входе в систему разблокировка будет произведена автоматически.

Литература

При написании данной статьи использовалась литература из следующих источников:

 

Друзья помогите этому контенту стать доступнее в социальных сетях.

Не проходи мимо жмакни по кнопке возможно кому то еще он будет полезен!