Использование криптографических ключей для обеспечения безопасного доступа к удалённым серверам и устройствам по протоколу 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 с данной локальной машины и с использованием данной учётной записи.