Как работает SSH

TL;DR: SSH = шифрованный канал между клиентом и сервером. Аутентификация: пароль (слабо) или ключи (надёжно). Ключ = пара: приватный (у вас) + публичный (на сервере). Всё шифруется — пароли, команды, файлы.

Процесс подключения

1. TCP-соединение        клиент → сервер:22
2. Обмен ключами         Diffie-Hellman → общий секрет
3. Шифрование канала     AES-256 (симметричное шифрование)
4. Аутентификация        ключ или пароль
5. Сессия                всё зашифровано

Аутентификация по ключу

Клиент                              Сервер
───────                             ──────
id_ed25519 (приватный)              authorized_keys (публичные)
    │                                    │
    ├─ Сервер отправляет challenge ──────┤
    ├─ Клиент подписывает приватным ─────→
    └─ Сервер проверяет публичным ───────┘
         ✓ Доступ разрешён

Приватный ключ никогда не покидает вашу машину. Сервер проверяет подпись, не видя самого ключа.

Алгоритмы ключей

АлгоритмРазмерСкоростьРекомендация
Ed25519256 bitБыстрый✅ Рекомендуется (современный стандарт)
RSA2048-4096 bitСреднийДопустим (≥3072 bit)
ECDSA256-521 bitБыстрыйДопустим
DSA1024 bit❌ Устарел, не использовать

Файлы SSH

На клиенте (~/.ssh/)

ФайлОписание
id_ed25519Приватный ключ (600)
id_ed25519.pubПубличный ключ (644)
configНастройки подключений (600)
known_hostsFingerprints серверов

На сервере

ФайлОписание
~/.ssh/authorized_keysПубличные ключи пользователей (600)
/etc/ssh/sshd_configКонфигурация SSH-сервера
/etc/ssh/ssh_host_*Ключи самого сервера

Host Key Verification

При первом подключении SSH спрашивает: «Доверяете ли вы этому серверу?» Fingerprint сервера сохраняется в ~/.ssh/known_hosts.

Если fingerprint изменился (переустановка сервера) — SSH блокирует подключение (защита от MITM). Решение: ssh-keygen -R server-ip.

Подводные камни

СитуацияСовет
Пароль вместо ключейКлючи безопаснее: нельзя brute-force, не передаются по сети
RSA 1024 bitУстарел. Минимум 3072, лучше Ed25519
Приватный ключ в Git / на флешкеКомпрометация! Перегенерировать и заменить на всех серверах
Один ключ на все серверыДопустимо для личного использования. Для организаций — отдельные ключи