Аутентификация открытым ключом и перенаправление агента
Узнайте об authorized_keys, ключах Ed25519 и RSA, а также о последствиях перенаправления агента SSH для безопасности.
«Аутентификация открытым ключом и перенаправление агента» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.
Формат файла authorized_keys
Аутентификация SSH по открытому ключу использует файл authorized_keys, обычно расположенный на сервере по пути ~/.ssh/authorized_keys. Каждая строка содержит открытый ключ в формате: algorithm base64-key comment. Сервер проверяет, может ли клиент доказать владение соответствующим закрытым ключом, подписав проверочный запрос.
Создание ключей SSH с помощью ssh-keygen
Команда ssh-keygen создаёт пары ключей для аутентификации. Запуск ssh-keygen -t ed25519 создаёт современную пару ключей Ed25519. С помощью -C можно указать комментарий для идентификации, например адрес электронной почты. По умолчанию инструмент сохраняет закрытый ключ (id_ed25519) и открытый ключ (id_ed25519.pub) в каталоге ~/.ssh.
Сравнение типов ключей: RSA, ECDSA, Ed25519
Ключи RSA длиной 4096 бит хорошо совместимы с устаревшими системами, но медленнее создают подписи. ECDSA на NIST P-256 работает быстрее и создаёт меньшие подписи, однако некоторые криптографы ставят под сомнение выбор параметров кривых NIST. Ed25519 на основе Curve25519 — современная рекомендуемая практика: быстрые ключи и подписи небольшого размера, отсутствие известных слабых мест и поддержка во всех современных реализациях SSH.
Закрытые ключи, защищённые парольной фразой
Файл закрытого ключа следует защищать парольной фразой. ssh-keygen шифрует закрытый ключ с помощью ключа, полученного из парольной фразы (bcrypt для современных ключей), поэтому злоумышленник, укравший файл, не сможет использовать его без парольной фразы. Без парольной фразы любой, кто имеет доступ к файлу, может пройти аутентификацию от Вашего имени на любом сервере, где хранится соответствующий открытый ключ.
ssh-agent для управления ключами
Фоновая служба ssh-agent хранит расшифрованные закрытые ключи в памяти в течение сеанса входа. Вы загружаете ключ командой ssh-add ~/.ssh/id_ed25519, которая запрашивает парольную фразу один раз. При последующих соединениях SSH обращается к агенту для подписывания проверочных запросов без повторного ввода парольной фразы, сочетая безопасность с удобством.
Как ssh-agent подписывает проверочные запросы
Когда сервер SSH отправляет проверочный запрос для аутентификации, клиент SSH поручает ssh-agent выполнить подпись через сокет Unix. Агент выполняет криптографическую подпись с помощью закрытого ключа, хранящегося в памяти, и возвращает только подпись. Байты закрытого ключа никогда не покидают процесс агента, даже для самого клиента SSH.
Перенаправление агента: возможности и риски
Перенаправление агента (ForwardAgent yes или ssh -A) позволяет удалённому сеансу SSH использовать Ваш локальный агент для дальнейшей аутентификации. Это удобно для перехода через бастионные узлы без копирования закрытых ключей на бастион. Однако если бастионный узел скомпрометирован, пользователь root на нём может получить доступ к сокету Вашего агента и пройти аутентификацию от Вашего имени на любом сервере.
ProxyJump и ForwardAgent для бастионов
ProxyJump (ssh -J bastion target) — более безопасная альтернатива ForwardAgent при доступе через бастионный узел. Он создаёт TCP-туннель через бастион, не раскрывая там сокет агента. Целевой сервер получает прямое соединение от Вашего локального клиента, а бастион только пересылает зашифрованные байты TCP и не может использовать Ваши учётные данные.
Аутентификация по сертификатам SSH
SSH поддерживает аутентификацию на основе сертификатов, при которой центр сертификации (CA) подписывает открытые ключи узлов и пользователей. Вместо распространения отдельных открытых ключей на каждом сервере настройте серверы на доверие к Вашему CA. Подписанный сертификат пользователя предоставляет доступ ко всем серверам, доверяющим этому CA, с необязательными сроком действия и ограничениями для субъектов, встроенными в сертификат.
ssh-keyscan для массового получения ключей
Инструмент ssh-keyscan подключается к одному или нескольким узлам и получает их открытые ключи узлов без аутентификации. Это удобно для автоматизации заполнения файлов known_hosts в сценариях развёртывания. Вывод можно напрямую перенаправить в файл known_hosts: ssh-keyscan -H example.com >> ~/.ssh/known_hosts.
Краткая схема аутентификации по ключу
Аутентификация по открытому ключу: клиент отправляет открытый ключ, сервер проверяет authorized_keys, сервер отправляет проверочный запрос, подписанный идентификатором сеанса, клиент (через агент) подписывает его закрытым ключом, а сервер проверяет подпись с помощью сохранённого открытого ключа. Если подпись верна, аутентификация проходит успешно без передачи каких-либо секретных учётных данных.
Выбор типа ключа SSH
Какой тип ключа SSH считается современной рекомендуемой практикой для новых развёртываний благодаря высокой скорости, небольшому размеру ключа и сильным свойствам безопасности?
Повторение аутентификации по открытому ключу
Главное: храните открытые ключи в authorized_keys, защищайте закрытые ключи парольными фразами, используйте ssh-agent для хранения расшифрованных ключей в памяти, отдавайте предпочтение типу ключа Ed25519, используйте ProxyJump вместо ForwardAgent при доступе через бастион, чтобы не раскрывать сокет агента, и рассмотрите сертификаты SSH для масштабируемого управления доступом.
Часто задаваемые вопросы
Урок «Аутентификация открытым ключом и перенаправление агента» бесплатный?
Да — полный текст урока «Аутентификация открытым ключом и перенаправление агента» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.
Чему я научусь в уроке «Аутентификация открытым ключом и перенаправление агента»?
Узнайте об authorized_keys, ключах Ed25519 и RSA, а также о последствиях перенаправления агента SSH для безопасности. Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cryptology Academy?
Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Аутентификация открытым ключом и перенаправление агента»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cryptology Academy?
Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Рукопожатие SSH и аутентификация ключом хоста
- Аутентификация открытым ключом и перенаправление агента
- Туннелирование SSH и методы перенаправления портов
- Усиление защиты SSH и лучшие практики аудита