Как правильно хранить ключи SSH на Windows: KeePass, GPG и SSH-сертификаты

Если вы работаете с Windows и подключаетесь по SSH к серверам, Git-репозиториям или jump-host’ам, главная задача — не просто «положить ключ куда-нибудь», а отделить ежедневное использование, резервную копию и контроль доступа. Для этого удобно связать три вещи: KeePass для парольных фраз и метаданных, GPG для зашифрованных резервных копий и SSH-сертификаты для коротких и проверяемых доступов.

Главное: публичный ключ не является секретом. Секрет — это приватный ключ, парольная фраза к нему и, если вы выдаёте сертификаты, закрытый ключ центра сертификации. Их нельзя хранить в облаке, заметках, чатах и общих папках без шифрования.

Что именно нужно хранить и где

У SSH-ключа обычно есть несколько частей, и путать их не стоит:

  • приватный ключ — файл вроде id_ed25519_work; его нельзя отдавать;
  • публичный ключ — файл id_ed25519_work.pub; его можно передавать серверам;
  • парольная фраза — защищает приватный ключ при использовании;
  • SSH-сертификат — файл id_ed25519_work-cert.pub; это не HTTPS-сертификат, а подписанный центром доступ с ограниченным сроком;
  • ключ центра сертификации — если вы сами выдаёте SSH-сертификаты, это уже уровень инфраструктуры, а не обычного ноутбука.

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

Что храним Где держать Зачем На что обратить внимание
Публичный SSH-ключ В KeePass, в репозитории, в тикете или на сервере Для добавления доступа Не секрет, можно спокойно передавать
Приватный SSH-ключ На локальном диске, защищённый парольной фразой Для ежедневного входа Не хранить в открытом виде в облаке и чатах
Парольная фраза KeePass или KeePassXC Чтобы не держать её в голове и не писать в файл Лучше не включать автоподстановку на чужих или заражённых машинах
Резервная копия ключа GPG-шифрованный файл в KeePass, офлайн-носителе или защищённом облаке Чтобы восстановиться после замены ноутбука Проверяйте восстановление хотя бы раз в несколько месяцев
SSH-сертификат пользователя Рядом с ключом, файл -cert.pub Для временного доступа на серверы Сам сертификат не секрет, но должен иметь короткий срок действия
Закрытый ключ CA Отдельная машина, офлайн-хранилище или аппаратный токен Для подписи SSH-сертификатов Не должен лежать на обычном рабочем ноутбуке

Начните с правильного ключа

Для большинства случаев на Windows сейчас нет причины создавать старые RSA-ключи на 1024 бит или DSA. Берите Ed25519, задавайте парольную фразу и сразу добавляйте понятный комментарий, чтобы через год не гадать, для чего этот ключ.

Пример создания ключа в PowerShell:

ssh-keygen -t ed25519 -a 100 -f "$env:USERPROFILE\.ssh\id_ed25519_work" -C "work-laptop-2026"

Параметр -a 100 увеличивает число раундов обработки парольной фразы. Это не магия, но делает подбор чуть менее приятным для атакующего. Парольную фразу не выбирайте в стиле Company2024!. Лучше длинная фраза, которую KeePass может хранить за вас.

Отдельно проверьте отпечаток ключа:

ssh-keygen -lf "$env:USERPROFILE\.ssh\id_ed25519_work.pub"

Этот отпечаток стоит сохранить в KeePass вместе с самим ключом. Когда будете добавлять публичный ключ на новый сервер или проверять подозрительную замену, сравнение отпечатков экономит нервы.

KeePass: хранить парольную фразу, а не беспорядок

Под KeePass здесь можно понимать KeePass 2.x, KeePassXC или совместимый клиент с защищённой базой. Для SSH удобнее KeePassXC, потому что там есть встроенная работа с SSH Agent. В классическом KeePass это тоже возможно, но часто через плагины.

В KeePass я бы заводил не просто запись «SSH», а нормальную карточку ключа:

  • название: SSH key — work laptop — id_ed25519_work;
  • парольная фраза: в поле Password;
  • примечание: где используется, кто владелец, дата создания, отпечаток;
  • вложение: публичный ключ .pub;
  • отдельно: путь к GPG-резервной копии, если она есть.

Приватный ключ как вложение в KeePass — спорное решение. Если база KeePass сильная, лежит на зашифрованном диске и не открывается на чужих машинах, это допустимо для аварийной копии. Но для ежедневной работы практичнее хранить сам ключ на диске, а в KeePass держать парольную фразу и метаданные. Тогда даже если кто-то найдёт файл ключа, без парольной фразы он останется почти бесполезным.

Если используете KeePassXC с SSH Agent, включите логику «удалить ключ из агента при закрытии или блокировке базы». Это удобно: база закрыта — агент пустой. База открыта — можно работать. Не стоит оставлять ключи в Pageant или ssh-agent навсегда, особенно на ноутбуке, который бывает в командировках, кафе и общих офисах.

GPG: для резервной копии, а не вместо парольной фразы

GPG не заменяет парольную фразу SSH-ключа. Он решает другую задачу: позволяет сделать резервную копию приватного ключа в виде файла, который нельзя прочитать без отдельного ключа или парольной фразы GPG.

Самый простой вариант для одного пользователя — симметричное шифрование:

gpg --symmetric --cipher-algo AES256 --output id_ed25519_work.gpg id_ed25519_work

После этого у вас появится id_ed25519_work.gpg. Его уже можно положить в KeePass как вложение, на офлайн-флешку или в защищённое облако. Но пароль к этому GPG-файлу не должен быть написан рядом с ним. Его можно хранить в KeePass, а для аварийного восстановления — ещё и отдельно, например в запечатанном конверте или офлайн-менеджере.

Если вы уже используете GPG-ключи, можно шифровать резервную копию на публичный GPG-ключ:

gpg --encrypt --recipient YOUR_KEY_ID --output id_ed25519_work.gpg id_ed25519_work

Но тут есть нюанс: если приватный GPG-ключ был только на этом ноутбуке и ноутбук умер, зашифрованная резервная копия тоже может стать проблемой. Для восстановления лучше иметь офлайн-копию GPG-ключа или отдельный recovery-ключ.

После создания GPG-копии проверьте, что она реально распаковывается:

gpg --decrypt id_ed25519_work.gpg

Если всё работает, временную незашифрованную копию удалите. На SSD полноценное «затирание» файла не гарантируется, поэтому основной упор делайте не на безопасное удаление, а на шифрование диска: BitLocker, корпоративное шифрование или хотя бы надёжную парольную защиту учётной записи Windows.

SSH-сертификаты: как сделать доступ временным

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

Сертификат не является секретом. Это публичный файл, который говорит серверу: «этот SSH-ключ подписан доверенным центром, может войти как такой-то пользователь и только до такого-то времени».

Пример выдачи пользовательского сертификата на отдельной CA-машине:

ssh-keygen -s ca_user_key -I alice-work-2026-05-15 -n alice -V +12h id_ed25519_work.pub

После этого появится файл id_ed25519_work-cert.pub. Его нужно положить рядом с приватным ключом. OpenSSH сам подхватит сертификат, если имена совпадают.

На сервере настраивается доверие к публичному ключу центра. Для Linux это обычно /etc/ssh/sshd_config:

TrustedUserCAKeys /etc/ssh/ca/user_ca.pub

Для Windows OpenSSH Server путь будет примерно такой:

TrustedUserCAKeys C:/ProgramData/ssh/administrators_ca.pub

Вот где нужна дисциплина. Закрытый ключ CA нельзя держать на том же ноутбуке, где вы работаете с почтой, браузером и мессенджерами. Его место — отдельная машина, офлайн-хранилище или аппаратный токен. Если украли CA-ключ, злоумышленник может подписывать сертификаты от вашего имени.

Сроки действия лучше делать короткими:

  • разработчику на каждый день — 8–24 часа;
  • администратору для разовой операции — 1–4 часа;
  • CI/CD-задаче — минуты или часы;
  • сервисному аккаунту — дольше, но с мониторингом и отдельным владельцем.

Не выдавайте SSH-сертификаты на месяцы «чтобы не возиться». Тогда вы просто перенесёте старую проблему authorized_keys в другую форму.

Особенности Windows: agent, WSL и PuTTY

На Windows SSH-ключи часто живут в нескольких мирах сразу: PowerShell, Git Bash, WSL, PuTTY/Pageant, VS Code, терминалы JetBrains. Отсюда большинство проблем.

Если используете штатный

Оцените статью
PEFile — Безопасность и технологии простым языком