Создание SSH ключа
Это не большая статья о том, что такое SSH и SSH-ключ, как его создать и как авторизовываться через него.
Что такое SSH?
SSH (Secure Shell) — защищённый сетевой протокол, который позволяет подключаться к удалённым серверам и управлять ими через зашифрованное соединение.
Но если говорить более глубоким языком, то:
SSH — это протокол, который создаёт зашифрованный канал между клиентом и сервером. Для этого он использует гибридное шифрование: асимметричное для обмена ключами и симметричное для скорости. Аутентификация может быть через пароль или SSH-ключи, причём ключи надёжнее, потому что приватный ключ никогда не передаётся.
Применяется в администрировании серверов, автоматизации, CI/CD и других задачах, где нужно безопасно управлять машинами по сети.
Что такое SSH ключ и зачем он н ужен?
SSH-ключ — это более безопасная альтернатива паролю. Он состоит из двух частей:
- Приватный ключ — хранится на локальной машине, его нельзя никому передавать.
- Публичный ключ — загружается на сервер и используется для проверки подлинности.
При подключении сервер проверяет, соответствует ли публичный ключ приватному, и если да — впускает без пароля.
Преимущества SSH-ключей перед паролями:
- Их невозможно перехватить в процессе вода.
- Они могут быть защищены фразой-паролем (passphrase), которая предотвращает их использование, если приватный ключ украдут.
- Они упрощабт автоматизированные подключения, напримре в скриптах.
Как происходит подключение по SSH?
Постараюсь по существу рассказать, но много техшизы.
Установка соединения (handshake)
Когда клиент (ты) подключаешься к серверу (ssh user@host), происходит следующее:
- Клиент и сервер обмениваются поддерживаемыми алгоритмами (шифрование, хеширование, аутентификация).
- Сервер отправляет свой публичны ключ клиенту.
- Клиент генерирует временный симметричный ключ и зашифровывает его публичным ключом сервера.
- Сервер расшифровывает этот ключ своим приватным ключом.
- Теперь оба используют этот симметричный ключ для шифрования сессии.
Это называется Diffie-Hellman key exchange ну или EDCH (если на эллиптических кривых).
Ключевая мысль:
- Асимметричное шифрование применятся только для установки безопасного соединения.
- Дальше всё шифруется симметрично для быстродействия.
Аутентификация пользователя
После установки зашифрованного соединения сервер проверяет, кто ты такой.
Есть два варианта:
- Парольная аутентификация — вводишь пароль, сервер проверяет и пускает (не безопасно в текущих реалиях).
- Аутентификация по SSH-ключу — самый распространённый вариант.
Если используется SSH-ключ:
- Клиент говорит (условно): "Здаров, это я, держи мой публичный ключ".
- Сервер провеяет этот ключ в
~/.ssh/authorized_keys. - Если ключ есть, то сервер отправляет случайное число (challenge).
- Клиент подписывает этот challenge приватным ключом и отправляет обратно.
- Сервер проверяет подпись с помощью публичного ключа (он же у него есть).
- Если подпись верна, клиент получает доступ.
Таким образом:
- Пароль нигде не передаётся.
- Взломать систему без приватного ключа невозможно.
Почему SSH безопасен?
Я бы сказал, что SSH держится на трёх китах.
- Симметричное шифрование (быстро и надёжно)
Используется после установки соединения для шифрования трафика. Примеры: AES, ChaCha20, Blowfish.
- Асимметричное шифрование (сложно взломать)
Применяется только в начале сессии и при аутентификации по ключам. Примеры: RSA (2048+ бит), ECDSA, Ed25519.
- Хеширование (гарантия целостности)
Каждое сообщение подписано хешем (HMAC). Примеры: SHA-2, SHA-3.
Бонус — защита от MITM-атак (человек посередине)
SSH использует fingerprint-сертификаты (отпечатки ключей). Если серверный ключ изменился — SSH предупредит об этом (WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!).
Как создать SSH-ключ?
SSH можно создать на любой UNIX-подобной системе (Linux, MacOS, WSL). В Windows лучше использовать Git Bash, PowerShell или Putty.
Я сделаю на примере Git Bash:
- Открываешь терминал.
- Вводишь команду:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa— используем алгоритм RSA (можноed25519), если нужна более короткая и безопасная пара ключей).-b 4096— длина ключа, чем больше, тем сложнее взломать.-C "your_email@example.com"— комментарий, например, email, чтобы различать ключи.
-
Выбираем место соранения ключа: По умолчанию, это
~/.ssh/id_rsa. Если этот файл уже есть, можно задать другое имя. -
По желанию задаём passphrase — если введёшь, ключ будет защищён паролем.
-
После выполнения команды будут созданы два файла
id_rsa— приватный ключ, никаких нахуйcmod 777на него!!!id_rsa.pub— публичный ключ.
Как добавить ключ на сервер?
Если у тебя уже есть SSH-доступ по паролю, добавь ключ вручную:
- Копируем публичный ключ на сервер:
ssh-copy-id user@remote_host
Если ssh-copy-id нет, можно вручную:
cat ~/.ssh/id_rsa.pub | ssh user@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
- Проверяем подключение:
ssh user@remote_host
Если всё ок — зайдёшь без запроса пароля.