Как работает SSH
TL;DR: SSH = шифрованный канал между клиентом и сервером. Аутентификация: пароль (слабо) или ключи (надёжно). Ключ = пара: приватный (у вас) + публичный (на сервере). Всё шифруется — пароли, команды, файлы.
Процесс подключения
1. TCP-соединение клиент → сервер:22
2. Обмен ключами Diffie-Hellman → общий секрет
3. Шифрование канала AES-256 (симметричное шифрование)
4. Аутентификация ключ или пароль
5. Сессия всё зашифровано
Аутентификация по ключу
Клиент Сервер
─────── ──────
id_ed25519 (приватный) authorized_keys (публичные)
│ │
├─ Сервер отправляет challenge ──────┤
├─ Клиент подписывает приватным ─────→
└─ Сервер проверяет публичным ───────┘
✓ Доступ разрешён
Приватный ключ никогда не покидает вашу машину. Сервер проверяет подпись, не видя самого ключа.
Алгоритмы ключей
| Алгоритм | Размер | Скорость | Рекомендация |
|---|---|---|---|
| Ed25519 | 256 bit | Быстрый | ✅ Рекомендуется (современный стандарт) |
| RSA | 2048-4096 bit | Средний | Допустим (≥3072 bit) |
| ECDSA | 256-521 bit | Быстрый | Допустим |
| DSA | 1024 bit | — | ❌ Устарел, не использовать |
Файлы SSH
На клиенте (~/.ssh/)
| Файл | Описание |
|---|---|
id_ed25519 | Приватный ключ (600) |
id_ed25519.pub | Публичный ключ (644) |
config | Настройки подключений (600) |
known_hosts | Fingerprints серверов |
На сервере
| Файл | Описание |
|---|---|
~/.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 / на флешке | Компрометация! Перегенерировать и заменить на всех серверах |
| Один ключ на все серверы | Допустимо для личного использования. Для организаций — отдельные ключи |