Использование криптографических ключей для обеспечения безопасного доступа к удалённым серверам и устройствам по протоколу SSH значительно упрощает и улучшает безопасность управления виртуальными машинами путём предоставления более надёжного метода аутентификации. Процедуру оснащения виртуального сервера SSH-ключами целесообразно производить уже на этапе первоначальной настройки VPS.
SSH-ключи состоят из пары ключей: открытого (public key) и секретного (private key). Открытый ключ может свободно передаваться по сети и сохраняется на удалённом сервере. Секретный ключ хранится на клиентской стороне, например, на вашем локальном компьютере. При этом владельцу секретного ключа необходимо обеспечить его конфиденциальность и защищённость.
При подключении к удалённому Linux-серверу SSH-ключи обеспечивают более высокий уровень безопасности по сравнению с традиционными паролями. Они используют асимметричное шифрование, где секретный ключ никогда не передаётся по сети, что снижает риск перехвата. Кроме того, поскольку аутентификация с использованием SSH-ключей не требует ввода пароля, злоумышленникам сложнее провести атаку методом перебора паролей.
Если в данный момент вы используете доступ к виртуальному серверу по SSH, то загрузить ключи на удалённую машину вы можете несколькими способами при условии, что вы используете локальную рабочую станцию, работающую на Windows:
- с вашего локального компьютера, используя командную оболочку PowerShell;
- с вашего локального компьютера, при помощи файлового менеджера, использующего для передачи файлов протоколы SCP и SFTP;
- подключившись к Linux-серверу через консоль аварийного доступа и вручную добавив необходимый открытый ключ.
Использование PowerShell
В командной оболочке PowerShell вы можете скопировать SSH-ключ со своей локальной рабочей станции на удалённый сервер при помощи нескольких несложных команд. Чтобы этого сделать, откройте на локальном компьютере PowerShell, для чего используйте комбинацию клавиш Win R, где введите powershell и нажмите Enter. Затем в открывшейся оболочке запустите следующие команды:
PS C:\> $youruser = "your-user"
PS C:\> $yourhost = "10.10.10.7"
PS C:\> $yourpubkey = Get-Content "$env:USERPROFILE\.ssh\id_rsa.pub"
PS C:\> ssh $youruser@$yourhost "mkdir -p ~/.ssh; echo `"$yourpubkey`" >> ~/.ssh/authorized_keys; chmod 700 ~/.ssh; chmod 600 ~/.ssh/authorized_keys"
Первая из данных команд присваивает переменной $youruser значение your-user, которое соответствует имени пользователя на удалённом сервере.
Следующая команда переменной $yourhost присваивает значение 10.10.10.7, соответствующее IP-адресу удалённой машины.
Затем используется команда для чтения файла, содержащего открытый ключ, и сохранения его в переменной $yourpubkey.
И, наконец, финальная команда, используя значения ранее объявленных переменных, подключается к виртуальному серверу и затем авторизуется на нём. Для того, чтобы подключиться к удалённой машине, вам потребуется набрать пароль вашей учётной записи на сервере. Авторизовавшись, команда создаёт каталог ~/.ssh, добавляет содержимое переменной $yourpubkey в файл ~/.ssh/authorized_keys, а также устанавливает соответствующие права на директорию ~/.ssh/ и файл authorized_keys.
Использование WinSCP
Помимо PowerShell для копирования открытого ключа на виртуальный сервер вполне комфортным выглядит использование такого программного продукта, как WinSCP. WinSCP — это популярный клиент SCP и SFTP для Windows, который применяется для копирования файлов на удалённые серверы.
Прежде всего, для использования WinSCP загрузите дистрибутив клиента с его официальной страницы.

После завершения загрузки дистрибутива запустите его, чтобы он произвёл установку WinSCP на ваш компьютер. Затем по окончании установки запустите WinSCP и в открывшемся окне в качестве протокола установите SFTP, в строку Host name введите IP-адрес виртуального сервера, в строку User name — имя пользователя на удалённой машине. Для подключения к VPS нажмите Login.

По умолчанию директория .ssh не будет отображаться в интерфейсе WinSCP, так как является скрытой. Чтобы включить отображение скрытых каталогов и файлов, перейдите Options ➝ Preferences ➝ Panels и активируйте опцию Show hidden files. Для применения изменений нажмите ОК.

Если вы создаёте первый SSH-ключ для доступа к данному серверу под именем данной учётной записи, то перетащите файл id_rsa.pub, находящийся в каталоге .ssh профиля вашей учётной записи на локальной рабочей станции в директорию ~/.ssh на виртуальном сервере. В случае, если директории .ssh в вашей домашнем каталоге не существует, её следует создать. Для этого нажмите правую кнопку мыши и перейдите New ➝ Directory. После того, как файл скопируется, переименуйте его, назвав authorized_keys.

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

Затем перейдите в каталог ~/.ssh на сервере, откройте для редактирования файл authorized_keys и вставьте в него ещё одной строкой содержимое буфера обмена. После чего закройте файл, сохранив внесённые в него изменения.

При этом следует учесть, что каталог ~/.ssh и файл authorized_keys должны иметь определённые ограниченные права доступа, а именно, 700 для ~/.ssh и 600 для authorized_keys. Поэтому как только файл authorized_keys будет содержать открытый ключ, подключитесь к серверу по SSH, либо при помощи аварийной консоли и установите соответствующие права доступа и владельца на каталог ~/.ssh:
$ chmod -R go= ~/.ssh
$ chown -R $USER:$USER ~/.ssh
Проверить установленные права доступа к файлам и директориям внутри ~/.ssh можно при помощи команды:
$ ls -la ~/.ssh
Её вывод должен выглядеть следующим образом:

Копирование ключа вручную
В случае, если у вас по каким-либо причинам пропал доступ по SSH при помощи пароля, вам придётся добавить свой открытый ключ на удалённый сервер вручную.
Для этого найдите на локальном компьютере файл id_rsa.pub, откройте его при помощи удобного для вас текстового редактора и скопируйте его содержимое.

Затем подключитесь к виртуальному серверу с помощью консоли аварийного доступа, запуск которой осуществляется кликом на изображение экрана сервера на его странице в личном кабинете RUVDS.

В консоли создайте директорию ~/.ssh, если её ещё не существует:
$ mkdir -p ~/.ssh
Открытые ключи, перечисленные в файле ~/.ssh/authorized_keys, являются теми, которые вы можете использовать для входа на сервер под именем данного пользователя. Поэтому в данный файл необходимо добавить скопированный открытый ключ. Чтобы это сделать, запустите следующую команду, заменив заключённый в кавычки ключ, который ниже приведён в качестве примера, на ключ, который вы скопировали ранее:
$ echo "ssh-rsa AAAAB3NzaC1yc2AAAADAQA..." >> ~/.ssh/authorized_keys
В качестве альтернативы использования приведённой выше команды вы можете в консоли аварийного доступа открыть файл ~/.ssh/authorized_keys с помощью текстового редактора, такого как nano или vi, и таким образом вставить содержимое ключа в файл.

Затем присвойте каталогу ~/.ssh и файлу authorized_keys соответствующие права, как это описано в предыдущем разделе.
Заключение
После выполнения выше описанных действий любым из перечисленных методов вы уже будете использовать аутентификацию без пароля для подключения к удалённому серверу по SSH с данной локальной машины и с использованием данной учётной записи.
