Для усиления безопасности вашего виртуального сервера мы рекомендуем вам сделать следующие изменения:
- запретить подключаться с паролем, вместо этого использовать SSH-ключи, которые значительно устойчивее к перебору,
- запретить подключаться с правами администратора, вместо этого использовать непривилегированного пользователя для повседневной работы, а root использовать только в крайних случаях.
Внимание!
Перед тем как делать какие-то изменения, связанные с удаленным доступом (в том числе по SSH), убедитесь что у вас есть под рукой реквизиты доступа к вашему виртуальному серверу через панель управления сервером — вы получили их в письме при заказе. В случае проблем с SSH это понадобится для восстановления доступа.
В руководстве для примера используется VPS с ОС Centos 7.8. О том, как выбрать и установить операционную систему на виртуальный сервер, читайте в нашем руководстве «Как произвести первоначальную настройку виртуального сервера: выбор операционной системы».
Мы предполагаем, что вы уже заранее создали обычного пользователя на вашем сервере и разрешили ему временно получать более высокий уровень привилегий с помощью команды sudo. О том, как это сделать, читайте в руководстве «Как создать непривилегированного пользователя на виртуальном сервере».
В качестве терминала мы использовали командную строку Windows. В операционных системах на базе Linux и в macOS SSH-клиент поставляется по умолчанию. В Windows 10 также есть клиент SSH (возможно, понадобится его заранее включить), можно также установить сторонние клиенты, например PuTTY.
Создание пары SSH-ключей
Для начала на вашей рабочей машине (клиенте) нужно сгенерировать SSH-ключи. В результате ваших действий будет создана пара ключей: один открытый (публичный), другой закрытый (приватный). Закрытый ключ нужно защитить парольной фразой и хранить в надежном месте. Если кто-то получит доступ к вашему закрытому ключу, это равносильно тому, что он узнает ваш пароль, поэтому их нужно дополнительно защищать парольной фразой.
Запустите на вашем ПК терминал (командную строку) и введите команду:
ssh-keygen -f my_keys -b 4096 -C "Atlex VPS keypair"
где ключ -f my_keys
задает название файла с ключами (можно использовать любое имя вместо my_keys
), -b 4096
задает размер ключа (рекомендуемый параметр для дефолтного протокола RSA), а -C
добавляет комментарий (это необязательно, но поможет понять, какой ключ для чего, если их много).
C:\Users\test>ssh-keygen -f my_keys -b 4096 -C "Atlex VPS keypair"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in my_keys.
Your public key has been saved in my_keys.pub.
Посмотреть комментарий и так называемый цифровой отпечаток вашего ключа можно с помощью команды:
ssh-keygen -l -f my_keys.pub
- где
my_keys.pub
— файл, содержащий открытый ключ.
Перенос открытого ключа на ваш сервер
Итак, вы сгенерировали пару ключей. Закрытый ключ должен оставаться на вашей рабочей машине, а открытый нужно добавить на сервер, на который вы будете ходить по SSH.
Для этого понадобится утилита ssh-copy-id
, где нужно указать имя файла с вашим открытым ключом, а также имя пользователя и адрес вашего сервера:
ssh-copy-id -i my_keys.pub user@ip.add.re.ss
После выполнения этой команды введите пароль пользователя user, после этого ключ будет скопирован на сервер нужным образом.
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'user@ip.add.re.ss'"
and check to make sure that only the key(s) you wanted were added.
Теперь следует проверить, что вы сможете подключиться с использованием SSH-ключа вместо пароля. Введите команду:
ssh -i my_keys -l user ip.add.re.ss
При подключении необходимо указать парольную фразу, которая защищает ваш приватный ключ. Если все правильно, то вы подключитесь к серверу без ввода пароля пользователя user
.
Запрет подключения с правами администратора и с паролем
Теперь когда вы настроили аутентификацию через SSH-ключи, можно переходить к дальнейшей настройке SSH-сервера.
Подключитесь к вашему серверу, снова введя команду из предыдущего шага и парольную фразу:
ssh -i my_keys -l user ip.add.re.ss
На следующем этапе нужно изменить файл конфигурации сервера SSH /etc/ssh/sshd_config
. Для этого откройте файл в текстовом редакторе с помощью команды (понадобится ввести пароль пользователя user):
sudo vi /etc/ssh/sshd_config
Найдите строку PermitRootLogin yes и измените yes на no (или можно закомментировать первоначальную строку и добавить новую):
#PermitRootLogin yes
PermitRootLogin no
Таким способом вы запретите подключаться по SSH с пользователем root
.
Далее нужно запретить подключение с паролем (будут использоваться только SSH-ключи). Для этого найдите строку #PasswordAuthentication yes
, раскомментируйте и замените yes
на no
. Либо можно оставить изначальный вариант закоментированным и добавить новую строку:
#PasswordAuthentication yes
PasswordAuthentication no
Теперь сохраните изменения и выйдите из режима редактирования файла.
Шпаргалка по работе с файлами в текстовом редакторе vi / vim
- Esc + : — переход в режим ввода команд
- / — поиск по документу
- n — в режиме поиска перейти к следующему результату
- a — режим редактирования
- # — закомментировать строку
- w — сохранить изменения
- wq — сохранить изменения и выйти
- q! — выйти без сохранения изменений
- q — выйти (команда спросит, сохранять ли изменения, если они были сделаны)
Проверьте, что ваш новый config-файл для сервиса SSH составлен корректно, с помощью команды:
sudo sshd -t
Если всё настроено правильно, команда не покажет ошибку. После этого можно перезапустить сервис SSH:
sudo systemctl restart sshd
При успешном перезапуске вы не увидите никаких ошибок и связь с сервером не прервется. Теперь необходимо проверить, что новые настройки работают корректно. Для этого сперва отключитесь от сервера с помощью команды logout
.
Далее подключитесь, не указывая ключ:
ssh -l user ip.add.re.ss
Вы увидите ошибку:
user@ip.add.re.ss: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
Заметьте, что система даже не спрашивает пароль, поскольку этот вид аутентификации запрещен.
Чтобы подключиться к серверу с использованием SSH-ключа, введите команду:
ssh -i my_keys -l user ip.add.re.ss