SSH
| Полное название | Secure Shell |
|---|---|
| Автор | Тату Юлёнен |
| Появился | 1995 |
| Стандарт | SSH-2, RFC 4251–4254 (2006) |
| Порт | 22/TCP |
| Основная реализация | OpenSSH (с 1999) |
| Другие реализации | Dropbear, PuTTY, libssh |
| Заменил | telnet, rlogin, rsh, rcp |
| Сайт OpenSSH | openssh.com |
SSH (англ. Secure Shell — «безопасная оболочка») — сетевой протокол для защищённого удалённого управления компьютером. Он шифрует весь трафик, проверяет подлинность сервера и пользователя и, помимо интерактивного входа в командную оболочку, умеет выполнять отдельные команды, передавать файлы и пробрасывать сетевые порты. SSH — основной способ администрирования серверов на Linux и других Unix-подобных системах, а также транспорт для Git, rsync и систем управления конфигурацией вроде Ansible.
История
В 1995 году Тату Юлёнен, исследователь Хельсинкского технологического университета, после атаки с перехватом паролей в университетской сети написал первую версию SSH как замену протоколам telnet, rlogin и rsh, которые передавали пароли открытым текстом. Протокол быстро распространился, а позднее был переработан в несовместимую версию SSH-2, стандартизированную IETF в 2006 году в RFC 4251–4254.[1]
В 1999 году разработчики OpenBSD на основе последней свободной версии исходного кода создали OpenSSH.[2] Сегодня это самая распространённая реализация: она входит в Linux, macOS, BSD и с 2018 года — в Windows.
Устройство протокола
SSH-2 состоит из трёх уровней:[1]
- Транспортный — согласование алгоритмов, обмен ключами (Диффи — Хеллман), шифрование и проверка целостности. Здесь же клиент проверяет ключ сервера.
- Аутентификация пользователя — по паролю, по открытому ключу, через сертификаты или внешние механизмы.
- Соединение — внутри одного зашифрованного канала мультиплексируются сессии: оболочка, команды, подсистема SFTP, проброшенные порты.
При первом подключении клиент показывает отпечаток ключа сервера и сохраняет его в ~/.ssh/known_hosts. Если ключ позже изменится, клиент предупредит о возможной атаке «человек посередине».
Ключи
Вход по ключу надёжнее пароля: закрытый ключ остаётся у пользователя, на сервер кладётся только открытый (см. Криптография с открытым ключом).
ssh-keygen -t ed25519 -C "laptop" # создать пару ключей
ssh-copy-id user@server.example # дописать открытый ключ в ~/.ssh/authorized_keys
ssh user@server.example # войти
Рекомендуемый тип ключа — Ed25519 (поддерживается в OpenSSH с 2014 года); RSA допустим при длине не менее 3072 бит. ssh-agent хранит расшифрованные ключи в памяти, чтобы не вводить парольную фразу при каждом подключении.
Конфигурация клиента
Файл ~/.ssh/config задаёт короткие имена и параметры подключения:[4]
Host prod
HostName 203.0.113.10
User deploy
Port 2222
IdentityFile ~/.ssh/prod_ed25519
Host internal
HostName 10.0.0.5
ProxyJump prod
После этого достаточно команды ssh prod, а ssh internal пройдёт к внутреннему узлу через prod как через промежуточный хост.
Проброс портов
| Флаг | Название | Что делает |
|---|---|---|
-L 8080:localhost:80 |
локальный | порт 8080 на клиенте ведёт на порт 80 сервера |
-R 9000:localhost:3000 |
удалённый | порт 9000 на сервере ведёт на порт 3000 клиента |
-D 1080 |
динамический | SOCKS-прокси на клиенте, соединения выходят с сервера |
-J host |
ProxyJump | подключение через промежуточный узел |
Локальный проброс часто используют, чтобы открыть веб-интерфейс или базу данных, доступные на сервере только через localhost.
Передача файлов
scp file user@host:/path/— простое копирование; начиная с OpenSSH 9.0 (2022) по умолчанию работает поверх протокола SFTP;[3]sftp user@host— интерактивный файловый клиент;- rsync
-avz -e ssh— синхронизация каталогов с передачей только изменений.
Безопасность сервера
Базовые настройки /etc/ssh/sshd_config: запрет входа по паролю (PasswordAuthentication no), запрет прямого входа root (PermitRootLogin no или prohibit-password), ограничение списка пользователей. Перебор паролей отсекают ограничением частоты подключений или утилитой Fail2ban.
OpenSSH внедряет постквантовую криптографию: с версии 9.0 по умолчанию используется гибридный обмен ключами sntrup761x25519-sha512, а с версии 10.0 (2025) — mlkem768x25519-sha256.[3]
Заметные уязвимости последних лет — атака Terrapin на целостность рукопожатия (2023, устранена режимом «strict kex» в OpenSSH 9.6)[5] и regreSSHion (CVE-2024-6387) — удалённое выполнение кода в сервере OpenSSH на Linux с glibc, исправленное в версии 9.8.[6] Обе истории напоминают: SSH-сервер нужно своевременно обновлять.