Для безопасного подключения к Linux-серверам по протоколу SSH хорошим тоном является использование SSH-ключей. Такой формат подключения обеспечивает аутентификацию и безопасность соединений, заменяя необходимость ввода пароля при каждом подключении.
Преимуществом использования SSH-ключей является прежде всего то, что пароли можно угадать или подобрать с помощью брутфорс-атак. SSH-ключи, особенно при использовании сильных алгоритмов и длинных ключей, взломать намного труднее. Кроме того, пароли передаются через сеть, что делает их уязвимыми к перехвату. SSH-ключи используют криптографические методы для аутентификации, не передавая чувствительные данные. Также SSH-ключи не могут быть украдены с помощью фишинговых атак, поскольку они не требуют ввода пароля на потенциально опасных сайтах.
SSH-ключи состоят из двух частей: открытого ключа и закрытого ключа. Закрытый ключ (private key) хранится на компьютере пользователя и должен оставаться защищённым и конфиденциальным. В свою очередь, открытый ключ (public key) загружается на сервер и сохраняется там для пользователя, которому предоставляется доступ.
Процесс аутентификации происходит следующим образом:
- пользователь инициирует SSH-соединение с сервером;
- сервер отправляет случайный вызов клиенту;
- клиент подписывает этот вызов своим закрытым ключом и отправляет подпись обратно на сервер;
- сервер проверяет подпись с помощью открытого ключа и, если проверка успешна, пользователю предоставляется доступ.
В нашем справочнике есть мануал, который рассказывает о том, как можно скопировать SSH-ключ с локального компьютера на Linux-сервер. Вместе с тем, хостинг RUVDS предоставляет своим пользователям инструмент, позволяющий установить SSH-ключ не используя стороннее ПО и не применяя ручной ввод ключа через SSH-подключение или консоль аварийного доступа.
Добавление SSH-ключа через личный кабинет
Чтобы воспользоваться такой возможностью, перейдите на сайте RUVDS в Настройки
➝ Управление SSH-ключами
.
Чтобы понять, как работает данный инструмент, разберём настройку подключения при помощи SSH-ключа к виртуальному выделенному серверу, работающему под управлением какой-либо Linux-системы.
Для начала на своей локальной рабочей станции создайте ключ, используя, например, следующую команду:
ssh-keygen -t rsa -b 4096
В данном случае мы создаём RSA ключ длиной 4096 бит.
При выполнении данной команды в том числе создаётся файл, содержащий открытый ключ. По умолчанию этим файлом является id_rsa.pub
, расположенный в каталоге .ssh
домашней директории вашего пользователя. Перейдите к этому файлу и откройте его при помощи удобного для вас текстового редактора. После чего скопируйте содержимое файла в буфер обмена.
Теперь войдите в Управление SSH-ключами
на странице RUVDS и нажмите Добавить ключ
.
В поле Название
укажите название добавляемого ключа, а в поле Публичный ключ
вставьте содержимое буфера обмена, то есть открытый ключ ранее созданного SSH-ключа. Нажав кнопку Добавить ключ
, сохраните данный ключ в своём личном кабинете на сайте RUVDS.
Добавленный ключ будет отображён в списке SSH-ключей.
Создание сервера с SSH-ключом
Теперь, когда SSH-ключ присутствует в соответствующем разделе личного кабинета, для того, чтобы привязать его к виртуальному серверу, этот сервер необходимо создать. Возможность работать с SSH-ключами в личном кабинете RUVDS доступна для любой версии Linux-системы. Поэтому на данном этапе следует заказать новый сервер, выбрать один из образов Linux в качестве операционной системы и в разделе SSH-ключи
активировать ключ, который необходимо привязать к создаваемому серверу.
После оплаты и окончания установки операционной системы вы уже сможете подключиться к новому VPS. При этом установить соединение по SSH можно с использованием SSH-ключа. Следует отметить, что осуществить это возможно только именно с той рабочей станции, на которой была произведена генерация данного ключа и пока только при помощи пользователя root
. Если подключившись к удалённой Linux-системе, вы создадите новую учётную запись, то подключение к серверу под её именем будет производиться с помощью парольной аутентификации.
Подключение другого пользователя через SSH-ключ
Для включения аутентификации при помощи ключа для учётной записи, не являющейся пользователем root
, необходимо скопировать открытый ключ в профиль нового пользователя. Но для начала нового пользователя нужно создать:
# adduser your-user
А также следует предоставить новому пользователю привилегии sudo
. Для этого запустите следующую команду, если ваш сервер работает на CentOS:
# usermod -aG wheel your-user
Если же на вашем VPS установлен Debian или Ubuntu, то команда будет выглядеть следующим образом:
# usermod -aG sudo your-user
Теперь для того, чтобы скопировать открытый ключ в профиль созданной учётной записи, подключитесь к системе под её именем и в домашнем каталоге создайте директорию .ssh
:
$ cd ~
$ mkdir -p ~/.ssh
Затем при помощи следующей команды необходимо получить интерактивную сессию суперпользователя:
$ sudo -i
И выполнив это, следует скопировать файл, содержащий открытый ключ, из директории .ssh
в домашнем каталоге пользователя root
в директорию .ssh
, расположенную в домашнем каталоге вашей учётной записи:
# cp ~/.ssh/authorized_keys /home/your-user/.ssh/
Далее, отключитесь от сессии суперпользователя при помощи комбинации клавиш Ctrl
D
и, используя следующую команду, удалите все права доступа на каталог ~/.ssh
для группы и других пользователей. После выполнения данной команды только ваш пользователь как владелец будет иметь доступ к этой директории и файлам внутри неё.
$ sudo chmod -R go= ~/.ssh
Следующая команда изменит владельца и группу всех файлов и подкаталогов в каталоге ~/.ssh
на текущего пользователя. Это гарантирует, что данная учётная запись будет являться владельцем всех файлов и каталогов в директории ~/.ssh
.
$ sudo chown -R $USER:$USER ~/.ssh
С этого момента ваш пользователь с данного локального компьютера сможет подключаться к серверу с использованием беспарольной аутентификации. Сделать это можно из командной строки при помощи команды ssh
:
ssh your-user@X.X.X.X
Здесь:
your-user
– имя вашей учётной записи;X.X.X.X
– IP-адрес вашего виртуального сервера.