Далеко не секрет, что безопасность SSH подключения является важным вопросом при работе с Linux серверами. Особенную критичность он приобретает в продуктивных окружениях. Для повышения безопасности, в этой статье будет рассмотрен процесс перевода Linux сервера на SSH аутентификацию по ключу.
Основное отличие аутентификации по ключу перед парольной аутентификацией заключается в том, что сам секрет не находится на сервере. При использовании парольной аутентификации хеш пароля, в том или другом виде, присутствует на сервере. Этот факт дает основание к действиям по его похищению и дальнейшему эксплуатированию. Использование же ключевой пары этот риск “умножает на ноль”. Cекрет, на основании которого сервер выполняет аутентификацию, не покидает клиентский терминал, а на самом сервере будет храниться лишь открытый ключ. Он будет служить для валидации действительно клиент обладает закрытым ключом или нет.
Если подходить к процессу с практической стороны, то условно его можно разделить на следующие фазы:
- Генерация ключевой пары
- Импортирование публичного ключа на Linux сервер и его конфигурирование
- Настройка Sudo для поддержки работы с SSH ключами
В качестве средства для генерации ключевой пары я буду использовать PuTTYgen. Эта утилита входит в состав клиента PuTTY который можно загрузить тут. Выбор именно этого софта обусловлен моей работой из-под Windows среды.
Процесс генерации запускается нажатием Generate, после чего ключевая пара будет создана. Сохраняем открытый и закрытый ключи. При необходимости можно задать дополнительную защиту парольной фразой для закрытого ключа. В этом случае, при его использовании, будет выполняться дополнительная проверка.
Следующая фаза будет состоять в передаче открытого ключа на сервер и последующей его привязке к конкретному пользователю. В принципе, передать файл можно 2-я способами – непосредственным копированием файла или через терминал. Я буду использовать второй способ, предварительно скопировав содержимое файла открытого ключа в буфер обмена.
На сервере создаем в каталоге /tmp новый файл и вставляем содержимое буфера обмена:
После создания файла, можно приступить к привязыванию открытого ключа к необходимому пользователю. Для этого будет использоваться утилита ssh-keygen.
1 | ssh-keygen -i -f /tmp/pub_key.pub >> /home/aiadmin/.ssh/authorized_keys |
где,
/tmp/pub_key.pub – расположение файла с открытым ключем
aiadmin – имя каталога пользователя которому будет импортирован ключ
Для аутентификации с помощью ключа, в настройках PuTTY для по необходимо выбрать расположение его расположение:
Финальной фазой будет настройка Sudo для поддержки работы с SSH ключами. Дело в том, что без дополнительной конфигурации будет запрашиваться пароль вместо ключа. Исправить это поможет следующее выражение:
1 | echo "aiadmin ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers.d/aiadmin |
где aiadmin имя учетной записи.
На этом процесс перевода Linux сервера на SSH аутентификацию по ключу закончен. В завершение, рекомендую отключить возможность парольного входа на SSH сервере. Для этого правим конфиг /etc/ssh/sshd_config выставляя параметр PasswordAuthentication в значение no. Для применения настроек необходимо выполнить sudo systemctl reload ssh.
Если у вас возникли какие-либо вопросы, пожалуйста, пишите в комментарии.