Раздел помощи SpaceWeb

Как сгенерировать SSH-ключ в Linux

13 дек, 2023

Что такое ключ SSH

SSH-ключ (Secure Shell key) – это способ аутентификации в системах, которые используют протокол SSH. Его используют для безопасной передачи данных и аутентификации пользователя. Вместо того чтобы вводить пароль, пользователь может использовать SSH-ключ для подтверждения своей личности.

SSH-ключ состоит из двух частей: 

  1. Открытый ключ используется для шифрования данных, и его можно безопасно распространять. 
  2. Закрытый ключ хранится на стороне пользователя и используется для расшифровки данных, зашифрованных открытым ключом.

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

Использование SSH-ключей для аутентификации и безопасной передачи данных предлагает несколько значительных преимуществ:

  • Безопасность. SSH-ключи обеспечивают более высокий уровень безопасности по сравнению с обычными паролями. Закрытый ключ, который хранится на стороне пользователя, служит для подписи сессий и аутентификации, а сам ключ никогда не передается по сети.
  • Криптографическая стойкость. SSH использует современные криптографические методы, что делает его надежным и защищенным от атак.
  • Удобство. Пользователю не нужно запоминать или вводить сложные пароли. Подключение осуществляется автоматически, когда доступен соответствующий SSH-ключ.
  • Автоматизация. SSH-ключи позволяют автоматизировать процессы, такие как скрипты для удаленного выполнения команд на сервере, регулярные резервные копии и многие другие задачи.
  • Поддержка множества операционных систем. SSH-ключи поддерживаются на большинстве операционных систем, включая Linux, macOS и Windows.
  • Легкость в управлении доступом. Администраторы могут легко управлять доступом пользователей, отключая или включая их ключи, редактировать разрешенные ключи на сервере и т.д.

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

Процесс работы с SSH-ключами 

  1. Пользователь создает пару ключей (открытый и закрытый). Обычно это делается с помощью утилиты «ssh-keygen».
  2. Открытый ключ копируется на сервер, с которым пользователь хочет установить SSH-соединение.
  3. Когда пользователь пытается войти в систему через SSH, сервер проверяет, есть ли открытый ключ пользователя в списке разрешенных ключей.
  4. Если ключ совпадает, сервер запрашивает подпись сессии от пользователя, используя его закрытый ключ.
  5. Если подпись верна, пользователь получает доступ к серверу без ввода пароля.

Генерация SSH-ключей в Linux

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

  1. Откройте терминал.
  2. Пропишите:

ssh-keygen -t rsa 

Что делает эта команда:

  • Утилита ssh-keygen, предназначена для генерации и управления SSH-ключами.
  • Флаг -t в команде указывает на тип ключа, который мы хотим создать в процессе генерации ключей. 
  • Мы используем тип RSA.

Важно! Вы можете использовать другой тип, в зависимости от ваших потребностей: DSA, ECDSA или Ed25519.

Кроме того, стоит упомянуть о флагах -p и -l, которые можно применить по необходимости. 

Флаг -p позволяет изменить пароль (passphrase) для вашего приватного ключа, обеспечивая дополнительный уровень защиты. 

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

  1. Вам будет предложено «Enter file in which to save the key» – то есть указать новый путь для сохранения генерируемой пары ключей:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):

Приватный ключ будет сохранен как id_rsa, а публичный – как id_rsa.pub. 

Вы можете указать местоположение файла или нажать Enter, чтобы оставить каталог по умолчанию:

Важно! Желательно оставить каталог по умолчанию. Так, ваш клиент SSH сможет автоматически находить ключи SSH при попытке аутентификации.

3.1. Если вы уже создавали SSH-ключи ранее, то система выдаст соответствующее сообщение на экране и предложить перезаписать их:

id_rsa has already exists.
Overwrite? (y/n)

Ответив y, вы больше не сможете использовать старую пару ключей для подключения к серверу. Старые ключи будут удалены. 

Однако, если вы не хотите перезаписывать ключи, просто введите n, и операция будет отменена.

  1. Далее у вас запросят безопасную кодовую фразу. Придумайте и дважды введите эту фразу:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

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

Если кто-то получит доступ к компьютеру, на котором хранятся закрытые ключи, он также может получить доступ к любой системе, использующей этот ключ. Тем не менее создание кодовой фразы к ключам предотвратит этот сценарий. Мы настоятельно рекомендуем ее установить.

Если вы все-таки приняли решение ее не использовать, пропустите этот шаг, дважды нажав Enter.

На этом этапе новый ключ SSH будет успешно сгенерирован и сохранен в ранее указанном файле. В выводе вы получите примерно следующий вывод:

Your identification has been saved in /Users/lissa/.ssh/id_rsa
Your public key has been saved in /Users/lissa/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:OqIHt/mTjw2E4oSRXz1ONqoPKR0BLUC7vay2/lsUVCo lissa@ Pro-Alice.local
The key's randomart image is:
+---[RSA 3072]----+
|=o   ...         |
|.oo ...          |
|oo.E.o*          |
| +oo.*.o         |
|..=.o.o S        |
| +o=+. .         |
|. *=.++.         |
| o.+=.o=         |
|o+++o.ooo        |
+----[SHA256]-----+

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

Для аутентификации по SSH-ключу в Linux сначала необходимо добавить открытый ключ на сервер. Для этого необходимо скопировать публичный SSH-ключ с помощью следующей команды:

cat ~/.ssh/id_rsa.pub

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

cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDD71BzlNr5gNDo9kvWiXJoZ+PP0tzHDiduTAqNbwFBB0lxzgY1un9gI4d4Pwy0Pvx4h1izDt01kfqHzUShGE00aK0YZk3WfdaFdlPIrrVRrI+nGfw8v7ej1nxD0TrI8FuW5PuvOKMvGo26DqzmTVVzef0N/8SC8M9HK1zjXR+3VWrjZQmaHgjP2p3UjdkZCu6Tqrh9BrPOGHtk3/nobWCMsSdo4PtvS3AP6jjBiu1xz0twdvEMdm+mf6NPnXXMcUJwf06reeFVQXygvGUtg8n8NI/7UH3w27XWKUs5FF76nN8J8J7GsIxNhAm2vCdQoydNjd2ZjbLRHxrMxRhYo+KDEWCOgNyatuCYiqizHNfKHgADU32ks6qtA0i6RyYChC4+GCfQoOa6ZlKYWGUS+wqbi8YTDF9M6F/G0qDrgk+Q6hH/uCSGQciVMP8xLPUWxNBo0T5+aKBGdxW2DGI4aJZiWmd3E2iekgIq4imM5aR8myL4HaF0WzxLVVRWRK/7CaM= 

Скопируйте выведенный на экране ключ в соответствующее поле панели управления хостингом. 

Кроме того, при заказе виртуального сервера в SpaceWeb вы можете добавить публичный ключ. Для этого введите имя ключа и загрузите текст, указанный ранее:  

Важно! Тут же вы можете и сгенерировать готовые ключи с помощью опции «Сгенерировать ключи»: 


 
После добавления публичного ключа вы можете приступить к удаленному подключению к серверу. 

Для этого выполните следующую команду в терминале:

ssh root@IP_адрес сервера

Если вы указали ключевую фразу для вашего приватного ключа на этапе его генерации, система запросит вас ввести эту фразу.

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

При первом подключении система может выдать предупреждение о том, что компьютер не распознает удаленный хост:

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Чтобы разрешить эту ситуацию, просто введите Yes и нажмите Enter. Теперь ваш компьютер запомнит этот удаленный хост.

Встроенные вами SSH-ключи можно будет найти в файле «~/.ssh/authorized_keys» в учетной записи пользователя root. 

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