SSH авторизация по ключу безопасности в CentOS 8 и Ubuntu 22.04

Хостинг или VPS Системное администрирование

Каждый день вопросы безопасности Linux-серверов становятся всё более актуальными. Помимо привычных атак, таких как DDoS, SYN-flood и других, особое внимание следует уделить атакам методом brute-force (подбор паролей). SSH авторизация по ключу является эффективным способом предотвращения данного типа атак, а также устранения уязвимостей в системе и повышения безопасности Linux-серверов в целом. В данной статье мы рассмотрим настройку SSH авторизации по ключу на примере серверов, работающих на базе CentOS 8 и Ubuntu 22.04.

Вступление

С данным типом атак сталкивается большинство Linux-серверов, подбор паролей к учетным записям пользователей ведется по всем доступным протоколам. Особую опасность несёт brute-force атака по подбору root-пароля. О вреде, который может нанести злоумышленник, получив root-права, говорить не стоит.

Есть разные способы борьбы с brute-force, среди которых, блокировка атакующих IP адресов на уровне firewall после нескольких неудачных попыток авторизации. С этим отлично справляется утилита fail2ban, однако, одна из атак может иметь неблагоприятный исход, поэтому мы прибегнем к другому способу – полностью запретим авторизацию по SSH протоколу с использованием пароля.

SSH авторизация по ключу безопасности возможна без полного запрета подключения по паролю по SSH протоколу на сервере. Для этого просто не выполняйте последний шаг, описанный в данной статье!

Генерация приватного RSA-ключа

Для настройки безопасного SSH-подключения, Вам понадобится сгенерировать приватный RSA-ключ. Для этого воспользуйтесь утилитой PuTTYGen (оф. сайт). Откройте скачанное приложение, в поле Number of bits in a generated key измените значение на 4096, таким образом мы увеличиваем сложность ключа, повышая его надёжность. Нажимаем Generate. Процесс займёт некоторое время.

PuTTY Key Generator

Скопируйте данный ключ в блокнот, а так же сохраните файл ключа – он пригодится в дальнейшем. Так же настоятельно рекомендуем сделать его резервную копию и разместить безопасном хранилище.

Настройка SSH авторизации по ключу

В данной статье мы рассматриваем настройку на примере CentOS 8 и Ubuntu 22.04, однако Debian и других ОС настройка будет схожей.

В первую очередь, нам следует создать директорию для хранения ключей:

mkdir ~/.ssh

Теперь необходимо создать сам файл ключей и скопировать в него RSA-ключ, сгенерированный с помощью PuTTYGen:

vi ~/.ssh/authorized_keys

Сохраняем файл и закрываем редактор.

Важным фактором являются права на директорию и файл ключей. Если файл будет доступен для чтения, ssh авторизация по ключу не удастся! Для этого выполняем следующие команды:

chmod 0700 ~/.ssh 
chmod 0600 ~/.ssh/authorized_keys

Теперь следует выполнить настройку sshd-сервера:

vi /etc/ssh/sshd_config

Ищем строку и раскомментируем её:

#PubkeyAuthentication yes

Теперь следует указать путь к файлу ключей. Для этого ищем переменную AuthorizedKeysFile и меняем на:

AuthorizedKeysFile ~/.ssh/authorized_keys

Перегружаем sshd-сервер:

systemctl restart sshd

Готово! SSH авторизация по ключу на стороне сервера настроена.

Ошибка Server refused our key в Ubuntu 22.04

При попытке авторизации с помощью приватного ключа в Ubuntu 22.04 зачастую возникает ошибка Server refused our key, которая вызвана тем, что sshd не поддерживает ключи, сгенерированные утилитой PutTTYGen, поэтому мы должны разрешить их в настройках сервера.

Открываем в редакторе конфигурационный файл sshd:

vi /etc/ssh/sshd_config

Добавляем следующие параметры:

HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

Сохраняем измененный конфиг и перегружаем sshd сервер:

HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

Готово, теперь ошибка Server refused our key устранена и на сервер разрешен доступ по ключу.

Авторизация в CentOS по ключу

Теперь попробуем авторизироваться на сервере по ключу. Запускаем PuTTY. В подменю Auth выбираем файл ключей, созданный в PutTTYGen. Как видите, файл был сохранён в формате .ppk – это расширение для приватных ключей PuTTY:

SSH авторизация по ключу

Авторизация в CentOS по ключу

Пробуем подключиться. Если Вы сделали всё правильно, то в терминале увидите уведомление, что авторизация выполнена с помощью ключа безопасности:

SSH авторизация по ключу

Отключение SSH авторизации по паролю

Если на сервере несколько пользователей и Вы не желаете отключать авторизацию по паролю, то просто пропустите данный пункт.

Для отключения SSH авторизации по паролю на сервере, откроем файл конфигурации sshd-сервера:

nano /etc/ssh/sshd_config

Находим строку:

PasswordAuthentication yes

И меняем значение yes на no:

PasswordAuthentication no

Важно! Мы должны именно заменить значение переменной, а не закомментировать строку, иначе это не принесёт нам никакого результата!

Перезагружаем sshd:

systemctl restart sshd

Проверяем. Для этого производим авторизацию на сервере без ключа (обычным способом). Если всё было сделано правильно, то мы увидим следующую ошибку:

Авторизация в CentOS по ключу

Заключение

Данный подход является оптимальным, если речь идёт о приватных серверах. SSH авторизация по ключу и запрет доступа к серверу по паролю помогла решить нам сразу же несколько проблем:

  • Предотвращение brute-force атак по ssh-протоколу;
  • Обеспечение безопасного подключения к серверу;
  • По субъективному мнению, более быстрый и удобный доступ к серверу без ввода пароля.
Оцените статью