Почему пароли — это прошлый век: настройка SSH-аутентификации по ключам
Для удаленного управления серверами, подключения к системам, работы с облачной инфраструктурой и автоматизации технических процессов используется протокол удаленного доступа — SSH (Secure Shell). Он обеспечивает безопасную передачу данных, препятствуя атакам и перехвату.
Чтобы подключиться к удаленным системам с помощью SSH, нужны криптографические ключи для аутентификации. Рассказываем, что это такое, как их создать и использовать.

Что такое SSH-ключи
SSH-ключи (Secure Shell Keys) — криптографические ключи, которые применяются для аутентификации пользователей при удаленном подключении по протоколу SSH. Они представляют собой секретную информацию, которую криптографические алгоритмы используют для создания и проверки цифровой подписи.
Открытый и закрытый ключи генерируются одновременно как пара. Восстановить закрытый ключ при его утере невозможно — именно поэтому рекомендуется создавать резервные копии ключей (в защищенном виде) или использовать системы управления ключами. Из закрытого ключа нельзя вычислить открытый, и наоборот — это фундаментальное свойство асимметричной криптографии.
В классической асимметричной криптографии открытый ключ шифрует сообщения, а закрытый — расшифровывает. Однако в SSH ключи используются не для шифрования трафика, а только для аутентификации. Сами данные во время сессии шифруются симметричными алгоритмами (AES, ChaCha20), ключи для которых вырабатываются отдельно по протоколу Диффи‑Хеллмана. Пара пользовательских SSH-ключей доказывает личность пользователя и не участвует в шифровании самого трафика. Однако при установке соединения используются также хостовые ключи (host keys) сервера, которые участвуют в аутентификации сервера и защите от MITM-атак на этапе key exchange . Сами данные сессии шифруются симметричными алгоритмами, ключи для которых вырабатываются отдельно.
SSH-ключи можно создавать для разных задач, например, для организации личного доступа администратора, для автоматизации CI/CD и выполнения скриптов, работы с Git-репозиториями через SSH-протокол (например, при выполнении git push/pull в GitHub, GitLab или Bitbucket). Если в каких-то отпала необходимость, их можно просто удалить.
Создаются SSH-ключи с помощью разных криптографических алгоритмов, о которых мы расскажем в следующих разделах.

Открытые и закрытые ключи
SSH-аутентификация строится на принципе асимметричной криптографии, подразумевающей использование пары ключей — публичного и закрытого. Эти ключи одновременно создаются, но выполняют разные задачи.
Открытый или так называемый публичный ключ размещается на сервере, а закрытый остается у пользователя. При подключении система проверяет, владеет ли пользователь закрытым ключом, соответствующим открытому ключу на сервере. Для этого сервер отправляет клиенту случайное число (вызов), клиент подписывает его своим закрытым ключом и возвращает подпись серверу. Сервер с помощью открытого ключа проверяет подпись. Сам закрытый ключ никогда не передается по сети.
Получается, что закрытый ключ нужен для проверки личности пользователя, а открытый — для подтверждения закрытого ключа. Чтобы было понятнее, объясним на примере. Сервер — это замок, который можно открыть только одним секретным ключом. Только сначала нужно убедиться, что секретный ключ подлинный. Это можно сделать путем сравнения с публичным ключом, который к замку не подходит — он служит только для сопоставления.
Распространение открытого ключа не представляет опасности. Если он попадет в руки злоумышленников, то не поможет им войти в систему. Риски ИБ возникают только в случае компрометации закрытого ключа.
Структура SSH-ключей
SSH-ключ в текстовом виде представляет собой строку, состоящую из нескольких частей. Он включает данные об используемом алгоритме, криптографическое значение и служебную информацию.
Открытый ключ
Обычно состоит из трех частей. Пример открытого SSH-ключа:
Первая часть указывает на тип алгоритма, который использовался для генерации пары ключей. Здесь это Ed25519. Также встречаются ssh-rsa и ecdsa.
Вторая часть представляет собой закодированное значение ключа. Это строка символов в формате Base64, содержащая параметры алгоритма и математическое представление ключа. На первый взгляд она выглядит хаотично, но на самом деле содержит структурированную бинарную информацию, которая необходима для криптографических операций. В примере это строка AAAAC3NzaC1lZDI1NTE5AAAAIC4q7n9xVqYkYxw9T6cL3nV8xqzR8q4Kp1sL0wXyJd8u.
Третья часть ключа представляет собой комментарий, который нужен для удобства идентификации. В нашем примере это запись user@laptop. Она указывает на конкретного пользователя и устройство, где был создан ключ. Комментарий в криптографических процессах не участвует, поэтому добавляется не всегда.
Закрытый ключ
У закрытого ключа структура более сложная. Она представляет собой набор данных, которые необходимы для создания криптографической подписи. Структура включает информацию о типе ключа, криптографический алгоритм и его параметры, служебные сведения.
Хранятся закрытые ключи в формате OpenSSH. Данные в файле закодированы. Если используется парольная фраза, дополнительно записывается информация о защите ключа.
Как работает SSH-аутентификация
В аутентификации задействована пара ключей — открытый и закрытый. Процесс условно можно разделить на четыре этапа:
1. Запрос. Клиент инициирует подключение к серверу и сообщает, какой открытый ключ будет использоваться.
2. Проверка. Сервер проверяет, внесен ли заявленный открытый ключ в файл authorized_keys.
3. Вызов и подпись. Сервер отправляет клиенту случайные данные (вызов) и идентификатор сессии. Клиент создает цифровую подпись этих данных с помощью своего закрытого ключа и отправляет подпись серверу.
4. Проверка подписи. Сервер проверяет подпись с использованием открытого ключа клиента. Если проверка успешна, аутентификация считается пройденной. Закрытый ключ при этом не передается по сети и не расшифровывает сообщения от сервера.
После установки TCP-соединения первым этапом является Key Exchange (обмен ключами) — клиент и сервер согласовывают алгоритмы шифрования, обмениваются хостовыми ключами и вырабатывают общий сессионный ключ. На этом этапе устанавливается зашифрованный канал . Только после этого начинается аутентификация пользователя, которая происходит уже внутри защищенного канал.
Закрытый ключ пользователя больше не участвует в передаче данных: дальнейшее взаимодействие происходит с помощью симметричных ключей, созданных в процессе key exchange. Таким образом, закрытый ключ используется для подтверждения личности пользователя, а симметричные ключи — для защиты данных в рамках сессии.
Схема аутентификации с помощью SSH-ключа В файле authorized_keys на сервере хранятся открытые ключи (по одному на строку). При подключении клиент сообщает серверу, какой ключ он хочет использовать (или сервер перебирает возможные варианты). Аутентификация считается успешной, если сервер находит в authorized_keys открытый ключ, соответствующий предъявленному клиентом закрытому ключу (через проверку подписи).
Плюсы применения ключей
Аутентификация с помощью SSH-ключей предпочтительнее традиционной парольной из-за более высокого уровня безопасности и удобства для пользователей. Преимущества такой схемы:
Защита от брутфорс-атак. SSH-ключи практически невозможно угадать методом перебора, который применяется для подбора паролей. К тому же, смысла в этом методе нет, если используется только аутентификация по ключам. Сервер ожидает от пользователя не пароль, а криптографическую подпись.
Возможность автоматизации. С помощью ключей можно автоматизировать такие процессы, как резервное копирование, развертывание компонентов инфраструктуры, удаленное управление серверами выполнение скриптов и не только.
Удобное управление доступом. Администратор может добавлять или удалять пользовательские ключи в файле authorized_keys, что позволяет управлять доступом без изменения атрибутов учетных записей.
Дополнительная защита. Для предотвращения компрометации закрытых ключей можно дополнительно задать парольную фразу. Надежное хранение обеспечивается с помощью специальных менеджеров ключей или SSH-агентов.
SSH-ключи позволяют организовать централизованное управление доступом через файл authorized_keys на каждом сервере. Однако для разных систем настоятельно рекомендуется использовать разные ключи, чтобы минимизировать риски при компрометации одного из них.
Типы SSH-ключей
Есть разные криптографические алгоритмы, поэтому выбор нужно делать в зависимости от строгости требований к безопасности, совместимости систем и производительности инфраструктуры. Специалисты в сфере ИБ рекомендуют переходить на новые криптографические стандарты, которые быстрее работают и отличаются устойчивостью к взломам и атакам.
Вот типы SSH-ключей, которые чаще всего встречаются в современных инфраструктурах:
Тип ключа | Описание | Применение | Статус использования |
Ed25519 | Алгоритм Ed25519 — реализация схемы цифровой подписи EdDSA на эллиптической кривой Curve25519. Преимущества: небольшой размер ключа (256 бит), высокая скорость работы и устойчивость к атакам по сторонним каналам. Начиная с OpenSSH 8.2 (2020) и выше, используется по умолчанию при генерации ключей. | Современные Linux-серверы, облачные платформы, Git-репозитории и DevOps-инфраструктура. | Новый стандарт безопасности |
RSA | Один из первых и наиболее распространенных алгоритмов шифрования. Рекомендовано использовать ключи не менее 2048–4096 бит | Старые серверы, системы с высокой совместимостью и корпоративные инфраструктуры | Широко используется, но уступает Ed25519 |
ECDSA | Алгоритм цифровой подписи на эллиптических кривых (NIST curves). Такие ключи компактнее и быстрее RSA. | ECDSA (алгоритм цифровой подписи на эллиптических кривых NIST) — поддерживается в OpenSSH, но не рекомендуется к использованию. Технически уступает Ed25519 по скорости, а также существуют обоснованные сомнения в надежности кривых NIST — известные криптографы выражали обеспокоенность тем, как именно были разработаны эти кривые. Рекомендуется использовать Ed25519 везде, где это возможно, из-за более высокой производительности и лучшей безопасности по умолчанию. | Поддерживается |
Создание SSH-ключей
SSH-ключи можно создать на пользовательском устройстве за несколько минут. Открытый ключ добавляется на сервер для дальнейшей аутентификации, закрытый остается у пользователя. Разберем процесс создания на Linux и Windows.
Создание SSH-ключей в Linux
В большинстве дистрибутивов Linux утилита ssh-keygen входит в пакет openssh-client и установлена по умолчанию. Если команда не найдена, установите ее через пакетный менеджер (например, sudo apt install openssh-client на Debian/Ubuntu).
Откройте терминал и выполните команду:
В современных версиях OpenSSH (8.2 и выше) Ed25519 используется по умолчанию, поэтому флаг -t ed25519 можно опустить — достаточно выполнить ssh-keygen. Если требуется совместимость со старыми системами (например, CentOS 7), явно указывайте флаг -t ed25519.
Система предложит выбрать каталог для хранения ключа:
Если не менять настройки, ключ по умолчанию сохранится в каталоге ~/.ssh/. Затем система предложит создать парольную фразу (passphrase) для защиты закрытого ключа:
Парольную фразу желательно задать, чтобы защитить ключ от несанкционированного использования при компрометации. Однако этот этап можно пропустить, просто нажав Enter.
После выполнения команд в каталоге .ssh появятся закрытый ключ id_ed25519 и открытый id_ed25519.pub. Проверьте их с помощью команды:
Генерация SSH-ключей в Windows
В Windows 10 и 11 ключи также можно создавать через утилиту ssh-keygen. Откройте Windows Terminal или PowerShell и выполните команду такого плана:
Выберите каталог для хранения ключа: C:\Users\username\.ssh\id_ed25519. По умолчанию ключ сохраняется в директории ssh в профиле пользователя. Далее можно задать парольную фразу для дополнительной защиты.
По окончании процесса в директории должны появиться два ключа. Для проверки примените команду:
Начиная с Windows 10 версии 1809 и Windows 11, в системе предустановлен OpenSSH-клиент. Поэтому основной способ создания ключей — через PowerShell или Windows Terminal командой ssh-keygen (аналогично Linux). Альтернативный, менее актуальный на сегодня способ — использование PuTTYgen из набора PuTTY (может потребоваться для совместимости со старыми системами). Как действовать:
Запустите PuTTYgen.
Укажите тип ключа, например, Ed25519 и RSA.
Нажмите Generate.
Для генерации набора данных в окне программы перемещайте курсор мыши.
Сохраните закрытый ключ после завершения генерации.
Скопируйте открытый ключ и разместите его на сервере в файле ~/.ssh/authorized_keys.
Если вы работаете с виртуальными машинами в Cloud.ru, открытый ключ можно сохранить в Evolution SSH Keys, а затем использовать при настройке доступа к ВМ.
Установка SSH-ключа на сервер
Чтобы настроить аутентификацию, нужно добавить открытый ключ на SSH-сервер и обновить конфигурацию.
Копирование открытого ключа
Чтобы сервер распознал клиента при подключении, добавьте открытый ключ в файл authorized_keys в домашнем каталоге на сервере. Проще всего скопировать ключ с помощью утилиты ssh-copy-id, которая установит его в нужный файл и задаст права доступа. Примените команду:
Имя пользователя на сервере — username, доменное имя или IP-адрес сервера — server_ip. После копирования система запросит пароль пользователя. Если он будет введен правильно, открытый ключ появится в файле:
Если по каким-то причинам не удается воспользоваться утилитой, добавьте ключ вручную. На своем устройстве выведите содержимое открытого ключа. Пример:
Полностью скопируйте строку, подключитесь к серверу по SSH и введите свой пароль. Например:
Если на сервере нет каталога .ssh, создайте его с помощью команды:
Установите права доступа для каталога:
Откройте файл authorized_keys:
Вставьте скопированный открытый ключ и сохраните изменения. Затем установите для файла права доступа:
После настроек сервер должен принимать подключения с помощью сохраненного ключа. Для проверки можно выполнить команду вида:
Пример записиНастройка сервера для использования SSH-ключей
После добавления ключа убедитесь, что сервер разрешает аутентификацию с его помощью. Проверьте параметры в конфигурационном файле sshd_config, который обычно находится по пути /etc/ssh/sshd_config.
С помощью текстового редактора откройте файл:
Проверьте или задайте параметр, который включает аутентификацию по ключам:
Затем укажите файл, где находятся сохраненные ключи:
При необходимости отключите вход по паролю:
Отключите прямой доступ от имени пользователя root:
После настроек сохраните файл и перезапустите SSH-сервер. Затем убедитесь, что изменения вступили в силу:
После перезапуска сервера можно попробовать подключиться по SSH. Если вы правильно сохранили ключ и выставили настройки, сервер будет применять новый метод аутентификации.
Советы по безопасности и практике использования
SSH-ключи на руку безопасности, но требуют правильной настройки и использования.
Отключение парольной аутентификации
Чтобы обеспечить безопасность удаленного доступа и снизить риски инцидентов ИБ, отключите вход по паролю и оставьте только аутентификацию по SSH-ключам. Что для этого предпринять:
Проверьте, что аутентификация по ключам корректно работает. Только после этого отключайте аутентификацию по паролю. Если сделаете наоборот, в случае ошибки потеряете доступ к серверу.
Отключите вход по паролю в конфигурации SSH. Запретить парольную аутентификацию можно в конфигурационном файле sshd_config с помощью параметра PasswordAuthentication no. После применения настроек будут использоваться только ключи.
Ограничьте доступ для пользователя root. Даже при использовании ключей нельзя без необходимости использовать учетную запись администратора. Рутинные задачи лучше выполнять под обычным пользователем.
Чтобы снизить риски автоматизированных атак, разрешите доступ SSH только с определенных IP-адресов или через VPN. Регулярно отслеживайте логи, чтобы своевременно обнаружить подозрительные попытки подключения.
Управление ключами
Криптографические методы не помогут защитить системы и данные, если пользователи халатно обращаются с SSH-ключами. Чтобы снизить ИБ-риски, рекомендуем придерживаться следующих практик:
Закрытые ключи храните только на доверенных устройствах. Ограничьте физический доступ к ним и никому не передавайте.
Для защиты закрытого ключа используйте парольную фразу (passphrase). Это добавляет слой шифрования к файлу ключа. Однако passphrase не является абсолютной защитой: при слабой фразе возможен брутфорс, а если злоумышленник получит доступ к расшифрованному ключу в памяти (например, через ssh-agent), он сможет его использовать. Для автоматических процессов (CI/CD, скрипты) допускается использование ключей без passphrase, но такие ключи требуют особо строгого контроля доступа.
Используйте современные алгоритмы шифрования. Например, Ed25519. При компактном размере ключа и хорошей производительности он обеспечивает высокий уровень безопасности.
Для разных систем используйте разные SSH-ключи. Во-первых, это снижает риски несанкционированного доступа к при компрометации ключа. Во-вторых, позволяет менять настройки в одной системе, не затрагивая другую.
Удаляйте устаревшие и неиспользуемые ключи. Они могут со временем накопиться в файле authorized_keys. Периодически проводите проверку и чистку.
Используйте менеджеры ключей и SSH-агента. Они позволяют надежно хранить ключи и автоматически применять их при подключении к системам.
Если используете много ключей, ведите реестр. Вносите туда информацию, где используется тот или иной ключ, когда был создан и кому принадлежит. Это упростит проведение аудита безопасности, позволит оперативно выявлять забытые или ненужные ключи.
Устранение неполадок
Пользователи могут сталкиваться с разными проблемами при подключении к серверу. Ошибки могут возникать из-за некорректной конфигурации SSH, неподходящих ключей или их неверного расположения, недостаточных прав доступа. Типичные проблемы и способы решения:
Проблема | Возможные причины | Устранение |
Сервер вместо ключа запрашивает пароль | Сервер не может найти и использовать ключ | Проверьте, включена ли аутентификация по ключам. Убедитесь, что ключ добавлен в файл ~/.ssh/authorized_keys на сервере и совпадает с ключом на стороне клиента |
Ошибка Permission denied при попытке подключения | Сервер отклоняет ключ | Проверьте, под тем ли пользователем выполняется подключение. Если да, убедитесь, что ключ присутствует в списке разрешенных и не поврежден |
Неверные настройки прав доступа | SSH отклоняет права по причине неправильной настройки или избыточности | Поменяйте настройки. Обычно нужны такие: каталог .ssh — 700, файл authorized_keys — 600, закрытый ключ — 600 |
Используется не тот ключ | Сервер отклоняет ключ, потому что пользователь выбрал из списка неправильный | Проверьте ключ и явно укажите нужный с помощью настройки в файле ~/.ssh/config или параметра -i |
Закрытый ключ защищен парольной фразой, поэтому не используется автоматически | Система запрашивает passphrase | Используйте SSH-агент, которые хранит ключи в памяти и применяет при подключении |
Ключ добавлен не в тот каталог или файл | Пользователь неправильно сохранил открытый ключ | Убедитесь, что ключ находится в ~/.ssh/authorized_keys пользователя, от имени которого выполняется подключение |
Ключ поврежден или некорректно скопирован | При копировании вручную добавлены лишние символы или, наоборот, удалена часть строки | Используйте специальные команды для копирования ключей, чтобы избежать ошибок |
Заключение
SSH-ключи — стандарт безопасной аутентификации в современных инфраструктурах. Используя их, можно обойтись без привычных паролей, которые могут перехватить или угадать злоумышленники. Это удобно для пользователя и надежно с точки зрения ИБ-практик. Главное, обеспечить конфиденциальность закрытого ключа, который открывает доступ к системам.

