SSH-ключи: какие бывают, как генерировать и где хранить.

Почему SSH-ключ — безопасная альтернатива паролю

Андрей Салита
Андрей Салита Архитектор ИБ
18 августа 2022

Рассказываем о SSH-ключах: какие бывают, как генерировать и где хранить.

Изображение записи

Мы используем пароли, чтобы войти в учетную запись в соцсети, почту, панель управления Selectel. С помощью пароля также можно зайти на арендованный сервер. У этого, правда, есть весомые недостатки. О них и более безопасной альтернативе — SSH-ключах — мы расскажем в тексте.

Пароли: их особенности и минусы   

Связка логин/пароль используется для авторизации в системе. Проще говоря, для того, чтобы приложение, операционная система — все, что стоит за окошком с вводом пароля, поняло, что вы — это действительно вы. 

Пароли — это привычно и просто. Но их использование влечет ряд недостатков:

  • Пароль можно подобрать. Часто мы выставляем пароли, которые легко запомнить. А значит, это какие-то сочетания слов или цифр. Есть способы создать более безопасный пароль — использовать случайный набор букв и цифр, генерировать длинный пароль. Но это приводит к следующей проблеме. 
  • Безопасные пароли, особенно если их много, практически невозможно запомнить. В итоге, если вы все-таки забыли какой-то из них, придется тратить время и силы на восстановление. 
  • Часто (как раз из-за пункта 2) люди останавливают один и тот же «проверенный» пароль на множество аккаунтов. В итоге, если пароль «утечет», злоумышленник получит доступ сразу к нескольким вашим аккаунтам
  • Наконец, связку логин/пароль можно подсмотреть.

Теперь представим, что у вас парк серверов, где расположены критические сервисы компании. К каждому серверу — отдельный пароль, их нужно где-то записывать, хранить. Желательно с учетом правил безопасности. 

Добавим, что серверы — очень популярная цель для злоумышленников. Поскольку они постоянно «смотрят» в интернет, машины подвергаются брутфорсу, или подбору паролей. По наблюдениям специалистов Selectel первая атака на сервер начинается спустя 10-15 минут после его появления в сети. 

SSH для подключения к серверу

Большинство пользователей устанавливает на серверы операционную систему Linux, а подключаются к ним по SSH. 

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

SSH-ключи: какие бывают и как работают

Прежде чем переходить к преимуществу SSH-ключей, разберемся, как они работают.

Благодаря SSH-ключам можно произвести аутентификацию без пароля. Ключи представляют собой набор из сотен различных символов, включая латиницу верхнего и нижнего регистров, а также спецсимволы. Общая длина часто составляет от 1024 до 4096 бит. 

Для аутентификации нужно два SSH-ключа — открытый и закрытый. 

Открытый ключ

Открытый, или публичный, ключ доступен всем. Он используется для шифрования данных при обращении к серверу. Проще говоря, это набор символов, при помощи которых мы шифруем информацию. 

При передаче публичного ключа не нужно подстраховываться — даже если он попадет в руки злоумышленников, они не смогут его использовать. Открытый ключ — лишь замок на двери, за которой находится важная информация. Без второго SSH-ключа он не имеет смысла. 

Закрытый ключ 

Закрытый, или приватный, SSH-ключ — это ключ к замку. Он расшифровывает данные. С ним нужно быть в разы осторожнее: хранить, соблюдая правила безопасности, и не передавать вторым лицам. Забегая вперед, скажем, что при генерации SSH-ключей закрытый ключ можно и нужно запаролить, чтобы обеспечить дополнительную защиту. 

Теперь разберемся, как открытый и закрытый ключи применяются при использовании протокола SSH. 

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

По сути, между клиентом и сервером происходит небольшая «перекличка», по которой сервер определяет, свой перед ним или чужой. Достаточно просто это изображено на схеме:

Преимущества SSH-ключей

Использовать SSH-ключи безопаснее, чем связку логин/пароль. Давайте перечислим почему: 

  • Невозможно взломать методами перебора. Попробуйте подобрать ключ минимум на четыре строчки. 
  • Приватный SSH-ключ недоступен из внешней сети. Пароль-фраза будет необходима исключительно для идентификации пользователя на сервере.
  • Закрытый ключ стандартно находится в каталоге, к которому у обычного пользователя нет доступа (в случае Unix-подобных систем). 
  • Для кражи приватного ключа злоумышленник должен иметь полный доступ к правам администратора операционной системы. Другими словами, необходим доступ к привилегиям sudo. Как правило, они есть, например, у пользователя root или того, кому аналогичные привилегии были назначены вручную.

Как мы писали выше, при создании ключа можно дополнительно зашифровать приватный ключ паролем. Его нужно будет ввести, чтобы посмотреть или скопировать SSH-ключ. В итоге, даже если злоумышленники получат доступ к root, им понадобятся дополнительные усилия для подбора пароля. Установка пароля является необязательным шагом, но он существенно повысит безопасность. 

Кроме того, ключи довольно просто использовать. SSH-ключ устанавливается (сохраняется) единоразово, его не нужно вводить каждый раз, как это было бы в случае пароля. Но нужно учитывать, что если вы запаролили доступ к SSH-ключу, то этот пароль придется вводить каждый раз.

Где хранить SSH-ключи

Итак, мы поняли, что стоит озаботиться правильным хранением закрытого SSH-ключа. Есть несколько вариантов.

  • Можно хранить ключи на разного рода внешних накопителях — флешки, съемные SSD-диски и т.д. Естественно, они должны храниться в защищенном месте. Носить флешку с SSH-ключами в качестве брелка на ключах точно не стоит. 
  • Также можно хранить ключ на виртуальном диске. Нельзя назвать это полноценно безопасным вариантом, зато в случае утечки данных злоумышленникам еще нужно будет понять, куда можно применить SSH-ключ. 
  • Подойдут для этих целей и специальные менеджеры паролей, которые заточены на их хранение. Например, Bitwarden, Keeper, Passbolt и другие. К выбору ПО тоже стоит подойти ответственно.  
  • Если вы клиент Selectel, можете воспользоваться менеджером секретов. Сервис сейчас в бете, что влияет на его функциональность, однако хранить SSH-ключи в нем можно. На их защите — двухфакторная аутентификация панели управления my.selectel. 
Менеджер секретов

Как использовать SSH-ключ

Чтобы соединяться с сервером по SSH-ключу, его нужно сгенерировать. Как это сделать достаточно быстро, мы подробно описали в инструкции. В Selectel этот ключ можно указать сразу при заказе выделенного или облачного сервера. 

Установить SSH-ключ на сервере можно и с помощью терминала (CLI). В каталоге, где располагается пара ключей, нужно скопировать сгенерированный публичный SSH-ключ и вставить в список авторизованных публичных ключей на сервере. В папку /home/username/.ssh/authorized_keys, где username – ваше имя пользователя.

Аутентификация с использованием SSH-ключа

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

Подключиться к серверу при помощи SSH-ключа можно с помощью команды:

~$ ssh -i <путь до приватного ключа> username@server IP

Чтобы каждый раз не указывать путь, достаточно скопировать закрытый ключ в папку /home/имя пользователя/.ssh.

Если вы подключаетесь к серверу впервые, появится следующее сообщение:

Компьютер не узнает удаленный сервер. Это нормально для первого подключения. Необходимо в ответном сообщении ввести yes и продолжить, нажав кнопку Enter. Если ранее вы не указывали пароль для шифрования ключей, вы подключитесь и авторизуетесь на сервере автоматически.

Отключение аутентификации по паролю на сервере

Без отключения входа по логину и паролю использование SSH-ключей теряет большую часть преимуществ. Поэтому рекомендуем отключить аутентификацию по паролю. 

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

Если ключ не будет установлен, а вы отключите аутентификацию по паролю, вы потеряете доступ к серверу. Восстановить его получится лишь из-под пользователя root или другого администратора с привилегиями sudo. 

Итак, отключаем аутентификацию по паролю. Подключаемся к удаленному серверу по SSH-ключу. Открываем файл с SSH-конфигурацией, выполнив в терминале следующую команду:

sudo nano /etc/ssh/sshd_config

В файле будет находиться параметр PasswordAuthentication, отмечаемый во многих случаях как комментарий. Символ однострочного комментария (#), находящийся перед названием параметра, необходимо удалить. После – отключить действие параметра, поставив ему значение no.

Сохраните файл и перезапустите службу SSH, чтобы применить изменения.

В ОС Ubuntu или Debian необходимо выполнить данную команду:

sudo service ssh restart

В ОС CentOS/Fedora название службы SSH – sshd. Команда для выполнения перезапуска службы будет исполнятся в таком виде:

sudo service sshd restart

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

Заключение

SSH-ключи — хороший способ обезопасить свой сервер от взлома злоумышленниками и разграничить уровни доступа к инфраструктуре среди пользователей. Их легко генерировать, легко хранить и использовать. Чтобы пользоваться всеми преимуществами ключей, рекомендуем оставить только этот способ получения доступа к серверу.