Авторизация по SSH-ключу
Протокол SSH популярен среди пользователей VPS и dedicated server — его выбирают, когда нужен инструмент для управления сетевой инфраструктурой, обмена файлами, удаленного подключения к серверу и отправки ему команд. Secure Socket Shell — безопасная оболочка, защищающая соединение между несколькими удаленными устройствами. Одна из мер безопасности, которую реализует протокол для защиты хоста — проведение аутентификации подключающихся к серверу клиентов. Стандартным методом проверки права доступа к серверу до недавнего времени был вход по логину и паролю. Однако появился более быстрый и надежный способ аутентификации — SSH-ключи. О том, как работают SSH-ключи — в статье.
Что такое SSH-ключ
Начнем с того, что SSH-ключ не один, их два — открытый и закрытый. Проверка права пользователя на управление удаленным сервером требует пары ключей. Если при авторизации через пароль юзеру нужно открыть SSH-клиент (программу, установленную на его устройстве), ввести туда данные и отправить их для проверки серверу, то при SSH-ключах коммуникация проходит исключительно между устройствами.
Изображение от rawpixel.com на Freepik.
Компьютер пользователя и удаленный сервер обмениваются зашифрованными сообщениями. Если ПК юзера удается распознать месседж сервера и правильно ему ответить, проверка считается пройденной и сеанс устанавливается. В этом случае тоже есть специальное ПО для взаимодействия двух сторон: для пользователя это по-прежнему SSH-клиент, для удаленного компьютера — демон SSH.
SSH-ключ — это некоторые математические данные, используемые алгоритмом шифрования и декодирования сообщений. Потеря ключа приводит к отсутствию возможности получения информации в исходном виде (до кодировки). Его компрометация грозит возникновению проблем с безопасностью, поэтому доступ к одному из пары ssh-ключей имеет только его владелец.
Как работает SSH-ключ
SSH-ключи работают по принципу «замок–ключ». Во время подключения по Secure Socket Shell происходит несколько процессов:
- обмен открытыми ключами;
- верификация сообщений;
- аутентификация пользователя на право отправлять команды.
Юзер выражает свое намерение установить соединение к удаленному устройству, отправив ему запрос по TCP-порту. В момент TCP-соединения клиент и сервер проверяют данные о редакциях SSH-протоколов. Если противоречий нет, SSH-сервер отправляет пользователю открытый ключ. Клиент должен дать ответ о доверии такому ключу. При положительном решении стороны генерируют сеансовый ключ, который будет защищать соединение текущей сессии. После этого происходит аутентификация подключающегося устройства. Клиент направляет другой стороне свой публичный ключ. Сервер проверяет его по своему списку public-key. Если совпадение есть, генерируется случайное число, для его шифрования применяется открытый ключ сервера. Появляется сообщение с «заблокированным» содержимым, которое отправляется юзеру. На стороне получателя происходит разблокировка «случайного числа» с помощью секретного ключа. Результат отправляется на проверку удаленному хосту. Если ключ пользователя смог открыть «замок», аутентификация пройдена и у клиента появляется доступ к серверу.
Защита SSH ключа
Доступ к приватному ключу должен быть только у того, кто имеет право на подключение к серверу, поэтому и храниться private-key должен на устройстве такого пользователя. Безопасность закрытого ключа зависит от защищенности его хранилища. Рекомендуем установить антивирусную программу, использовать лицензионные версии ПО, не скачивать файлы из непроверенных источников и придерживаться других правил информационной гигиены. Если вы сомневаетесь в том, что утечка с вашего ПК невозможна, установите для ключа защиту кодовой фразой. В случае компрометации private-key у вас появится дополнительное время на замену ключа. Пока злоумышленник будет подбирать кодовую фразу, вы успеете удалить старый и установить новый.
Открытые и закрытые SSH-ключи
Публичный ключ размещается на сервере в файле .ssh/authorized_keys. Закрытый ключ располагается на компьютере, с которого выполняется вход в систему. Алгоритмы шифрования могут быть разными, самым популярным классом является RSA. Он основан на целочисленной факторизации. Длина ключа в данном случае доходить до 16384 бит. По умолчанию значение находится на уровне 3072 бит, однако вы можете его масштабировать с помощью команды ssh-keygen. Стоит учитывать влияние длины ключа на потребление вычислительных мощностей и трафика, которые будут задействованы устройствами. С объемным ключом обмен информацией выполняется дольше.
Преимущества SSH-ключей
SSH-ключи не только надежнее авторизации по паролю, но и удобнее для использования на серверах. Преимущества у ключей следующие:
- Не нужно запоминать. По правилам информационной безопасности для каждого логина нужен уникальный и регулярно обновляемый пароль. Password должен быть длинным, чтобы его было сложно взломать. При этом записывать его нельзя, а запомнить несколько таких комбинаций из текста, букв и спецсимволов сложно. Ключи хранятся в файлах, и их не нужно постоянно держать в памяти.
- Трудно взломать. Пароль с целью взлома системы можно подобрать с помощью специального скрипта. Ключи гораздо длиннее, что в несколько раз усложняет подбор.
- Удобно применять в разработке. Ключи подходят для использования в скриптах, позволяющих автоматизировать некоторые операции: бэкап, установку обновлений и т. д.
Как создать ключ для авторизации по SSH
В операционных системах предусмотрены специальные утилиты, позволяющие создавать SSH-ключи. Мы разберем создание ключа с типом шифрования rsa. В дистрибутивах Linux операция будет выполняться через терминал, в Windows с помощью специальной программы.
Создание SSH-ключей в Linux
В дистрибутивах Linux за генерацию отвечает команда ssh-keygen. Вводим в терминал:
В командной строке появилось сообщение с предложением выбрать место сохранения файлов, в которых окажутся созданные ключи. Можно оставить параметры по умолчанию. В этом случае файл с приватным ключом будет иметь название id_rsa, с открытым — id_rsa.pub. Если хотите изменить его, введите новый путь к файлам. На следующем этапе команда предлагает защитить ключ кодовой фразой. В терминале появится сообщение:
При пропуске шага дополнительной аутентификации не будет.
Создание SSH-ключей на Windows с PuTTYgen
В Windows тоже есть команда keygen, однако удобнее создавать ключи через программу PuTTy и утилиту PuTTYgen, которые позволяют выпустить сразу пару ключей. Алгоритм действий будет следующим:
- Открываем PuTTYgen.
- Нажимаем на кнопку Gengerate.
- Следуя указаниям утилиты, передвигайте курсор по экрану, чтобы получить случайные значения ключей.
- Сохраняем закрытый ключ, нажав на кнопку Save private key. В параметрах PuTTY указываем путь к файлу.
- Копируем публичный ключ в буфер обмена, чтобы перенести его на сервер. Закрываем программу.
-
Открываем PuTTY и при первом подключении к серверу используем пароль. Последовательно вводим команды для создания на удаленном устройстве папки и файла для хранения ключей и приватного доступа к ним:
-
Вставляем public-key в файл authorized_keys с помощью команды:
- Подтверждаем ввод Ctrl+D.
- В PuTTY открываем Connection — SSH — Auth, выбираем кнопку Browse и вводим путь к приватному ключу.
Как отключить аутентификацию по паролю
Чтобы при повторном подключении к серверу система не запрашивала одновременно и ключ, и пароль, нужно отключить лишний параметр аутентификации. На сервере открываем конфигурационный файл /etc/ssh/sshd_config, находим директиву PasswordAuthenticatin. Переводим ее в состояние No:
Сохраняем изменения и перезапускаем службу:
Теперь подключение по паролю отключено.
Заключение
Установление доступа к серверу с помощью SSH-ключей надежнее, чем аутентификация по паролю. Мы разобрали общие принципы работы протокола.
Оцените статью