SSH-ключ — что это, как сгенерировать и добавить на сервер | Глоссарий FREEHOSTING

SSH-ключ

SSH Key
SSH-ключ — SSH-ключ — пара криптографических ключей (приватный и публичный) для аутентификации в протоколе SSH без пароля. Приватный ключ хранится у пользователя, публичный добавляется на сервер в файл authorized_keys. Безопаснее и удобнее парольной авторизации.

Определение простыми словами

SSH-ключ заменяет пароль при подключении к серверу: на стороне клиента лежит приватный ключ (~/.ssh/id_ed25519), на стороне сервера в файле ~/.ssh/authorized_keys — публичный. При подключении сервер проверяет, что у клиента есть приватная половина пары, и пускает без ввода пароля. Парольное окно остаётся только для самого ключа, если вы выбрали зашифровать его passphrase.

Публичный ключ можно безопасно публиковать, например в GitHub или передавать админу VPS. Приватный — нет: он эквивалентен полному доступу. Лучшая практика — генерировать ключи с алгоритмом Ed25519, хранить с passphrase и подгружать в ssh-agent.

Сравнение

Алгоритм Длина по умолчанию Скорость Когда использовать
Ed25519 256 бит Очень высокая Современный выбор по умолчанию
ECDSA (nistp256) 256 бит Высокая Совместимость со старыми системами
RSA 3072–4096 бит Средняя Старые серверы без поддержки Ed25519
DSA 1024 бита Низкая Не использовать (устарел, отключён в OpenSSH 7+)

Кейсы использования

  • Беспарольный вход на арендованный VPS и отключение PasswordAuthentication в /etc/ssh/sshd_config — главный шаг по защите от брутфорса.
  • Деплой кода: CI получает приватный ключ через секреты, заходит на сервер и запускает rsync.
  • Аутентификация в GitHub/GitLab по публичному ключу для git push без токенов.
  • Подключение через bastion-host: ProxyJump и проброс ssh-agent позволяют ходить на внутренние машины одной командой.
  • Негативный сценарий: утечка приватного ключа из репозитория или забытого ноутбука даёт атакующему root-доступ. Помогает passphrase, аппаратные токены (YubiKey) и быстрый отзыв через удаление из authorized_keys.

Технические детали

# Генерация современного ключа Ed25519 с комментарием
ssh-keygen -t ed25519 -C "stas@laptop" -f ~/.ssh/id_ed25519

# Добавить публичный ключ на сервер одной командой
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@1.2.3.4

# Если ssh-copy-id недоступен — вручную
cat ~/.ssh/id_ed25519.pub | ssh user@1.2.3.4 
  'mkdir -p ~/.ssh && chmod 700 ~/.ssh && 
   cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'

# Запретить вход по паролю на сервере
sed -i 's/^#?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl reload ssh

# Загрузить ключ в агент, чтобы не вводить passphrase каждый раз
ssh-add ~/.ssh/id_ed25519

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

Можно ли использовать один SSH-ключ для всех серверов?

Технически да, но риск выше: компрометация одной пары даёт доступ ко всем системам. Лучше генерировать отдельные ключи для важных контуров (production, личное, CI) и хранить разные passphrase.

Что делать, если приватный ключ утёк?

Сразу удалить соответствующий публичный ключ из ~/.ssh/authorized_keys на всех серверах и из настроек GitHub/GitLab. Сгенерировать новую пару и заменить во всех местах. После аудита проверить логи входов на предмет постороннего доступа.

Зачем passphrase, если ключ и так уникален?

Passphrase шифрует приватный ключ на диске. Если ноутбук украдут или скопируют файл, атакующий не сможет использовать ключ без подбора фразы. В ssh-agent passphrase запрашивается один раз за сессию.