Блог
DevOps · безопасностьDevOps 7 мин чтения

SSH-ключи: генерация, ротация, ssh-agent на 2026

Как правильно генерировать Ed25519-ключи, использовать ssh-agent для управления парольными фразами, ротировать ключи без потери доступа, настраивать ~/.ssh/config.

SSH-ключи — базис любой серверной работы. Ниже — минимальный, но актуальный на 2026 год гайд: Ed25519 (вместо устаревшего RSA), ssh-agent, авто-подхват на macOS/Linux, ротация без потери доступа.

Генерация ключа Ed25519

RSA-2048 всё ещё безопасен, но Ed25519 — быстрее, короче, современнее. Используем его.

ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_prod
# при генерации спросит passphrase — установите сильную (24+ chars)

# файлы:
# ~/.ssh/id_ed25519_prod       - приватный (chmod 600)
# ~/.ssh/id_ed25519_prod.pub   - публичный (кладём на серверы)

Копирование на сервер

ssh-copy-id — удобнее ручного копирования.

ssh-copy-id -i ~/.ssh/id_ed25519_prod.pub [email protected]

# альтернатива — вручную:
cat ~/.ssh/id_ed25519_prod.pub | ssh [email protected] \
  "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

ssh-agent: чтобы не вводить passphrase каждый раз

ssh-agent держит расшифрованный ключ в памяти. На macOS/Linux — обычно уже запущен.

# запуск (если не запущен)
eval "$(ssh-agent -s)"

# добавить ключ (спросит passphrase 1 раз)
ssh-add ~/.ssh/id_ed25519_prod

# проверка
ssh-add -l   # список ключей в агенте

# теперь ssh не спрашивает passphrase
ssh [email protected]

~/.ssh/config — псевдонимы серверов

Позволяет писать ssh prod вместо ssh -i ~/.ssh/id_ed25519_prod -p 22042 [email protected].

# ~/.ssh/config
Host prod
    HostName 1.2.3.4
    User deploy
    Port 22042
    IdentityFile ~/.ssh/id_ed25519_prod
    AddKeysToAgent yes
    UseKeychain yes   # macOS: сохранить passphrase в Keychain

Host db-*
    User deploy
    IdentityFile ~/.ssh/id_ed25519_prod
    ProxyJump prod    # ходить через bastion

Ротация ключей без потери доступа

Периодически (раз в 6-12 мес) — генерируйте новый ключ, разворачивайте, удаляйте старый.

  • Сгенерировать новый: ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_prod_2026-07.
  • Скопировать на все серверы: ssh-copy-id -i newkey.pub server.
  • Проверить вход по новому — с параметром -i newkey.
  • Удалить старый из ~/.ssh/authorized_keys на всех серверах (grep -v "old-comment").
  • Обновить ~/.ssh/config — заменить IdentityFile.
Осторожно

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

Частые вопросы

Passphrase обязателен?
Для рабочих серверов — да. Утечка приватного ключа без passphrase = мгновенный доступ атакующего. С passphrase + Ed25519 — брутфорс займёт годы.
Можно один ключ на все серверы?
Технически да, безопаснее — отдельный на prod, отдельный на dev, отдельный на CI. Утечка одного не даёт доступа ко всему.
GitHub / GitLab — свой ключ?
Отдельный ключ для git-provider'ов — правильно. Он менее чувствителен, чем prod-ключ, ротировать можно чаще.