Тариф успешно добавлен в корзину
В корзину
url image

Как создать ключ для авторизации по SSH и добавить его на сервер?

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

SSH-ключи представляют собой пару — закрытый и открытый ключ. Закрытый должен храниться, соответственно, в закрытом доступе у клиента, а открытый отправляется на сервер и размещается в файле authorized_keys.

Создание SSH-ключей в Linux

На клиентской стороне должен быть установлен пакет ssh (openssh). На серверах FirstVDS с шаблонами по умолчанию необходимое ПО уже установлено.

Для ОС CentOS, AlmaLinux или RockyLinux выполните команду:

# yum -y install openssh-server openssh-clients

Для ОС Debian или Ubuntu выполните команду:

# apt -y install openssh-server

Дальнейшая инструкция будет одинаковая для всех ОС.

На клиентском компьютере в командной строке выполните команду генерации ключей:

# ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):

Введите путь файла, в который будут помещены ключи. Каталог по умолчанию указан в скобках, в примере /домашний_каталог/.ssh/id_rsa. Если хотите оставить расположение по умолчанию, нажмите Enter.

Пароль (passphrase) используется для ограничения доступа к закрытому ключу. Пароль усложнит использование ключа третьими лицами в случае утраты. Если не хотите использовать секретную фразу, нажмите Enter без заполнения строки.

Успешно сгенерировав пару ключей, вы увидите уведомление:

Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:JPDzeSan06C9+osd+sKXWP0RmPk4UbSESaTvYn0aXVk root@test-server1.com
The key's randomart image is:
+---[RSA 3072]----+
|.    oo+o        |
|     o   .o...   |
|     + o  =.   E |
|      = o= .  o  |
|   S.=+ .o       |
|   o.@+.o.       |
| ..oB.=oo.       |
|  +=o= +.        |
|  +**..          |
+----[SHA256]-----+

В актуальных ОС генерация ключей происходит с такими настройками: тип аутентификации — RSA, число бит в ключе — 2048 или 3072.

Рекомендуем позаботится о безопасности ключей. В первую очередь обязательно необходимо задавать парольную фразу (passphrase), которая не должна быть простым. 

Укажем также параметр -o, что позволяет использовать формат OpenSSH, который более безопасен, чем старый PEM.

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

Будьте внимательны, слишком большое значение приведет к тому, что вам придется ждать каждый раз при входе на сервер по ключу. Значение по умолчанию — 3 секунды, можно задать 100 секунд. С помощью параметра -b можно задать число бит в ключе — 4096. Получаем такую команду:

# ssh-keygen -t rsa -b 4096 -o -a 100 -C “ваш_email@example.com”

Параметр -C "ваш_email@example.com"  — комментарий, который помогает идентифицировать ключ. Можно указать любую информацию, чтобы пометить ключ. Это важно, когда ключей на сервере много, для единичного ключа комментарий можно не добавлять вовсе.

В последних ОС к 2024 году (Debian 12, Ubuntu 24) RSA больше не является оптимальным выбором для безопасности SSH, хотя он по-прежнему поддерживается. Более надёжными и устойчивыми к взлому считаются Ed25519 и ECDSA.

Ed25519: Этот алгоритм считается более безопасным, быстрым и устойчивым к атакам, чем RSA. Он также генерирует ключи меньшего размера, что улучшает производительность. Если ваш сервер поддерживает Ed25519, рекомендуется использовать его.

 ssh-keygen -t ed25519 -C "ваш_email@example.com"
  • Команда сгенерирует ключ длиной 256 бит, который при этом обеспечивает высокую степень безопасности.

ECDSA: Вторая альтернатива, к сожалению, уязвимая к квантовым атакам, но в основном используется в случаях, где Ed25519 не поддерживается, а RSA не подходит.

ssh-keygen -t ecdsa -b 521 -C "ваш_email@example.com"
  • Ключ на 521 бит обеспечивает отличное соотношение безопасности и производительности.

Выбираем директорию, вводим пароль и видим ключ RSA или выбранную вами альтернативу (Ed25519/ECDSA) .

Открытый ключ хранится в файле /домашний_каталог/.ssh/id_rsa.pub, закрытый — /домашний_каталог/.ssh/id_rsa.

Никогда и никому не передавайте, не показывайте свой закрытый ключ и не выкладывайте его на публично доступные сервисы (в т.ч. GitLab, GitHub и пр.).
Где хранятся открытый и закрытый ключи

Скопируйте открытый ключ на сервер в файл  /домашний_каталог/.ssh/authorized_keys. Одной строкой:

cat ~/.ssh/id_rsa.pub | ssh root@ip-адрес-сервера 'cat >> ~/.ssh/authorized_keys'

Или откройте этот файл на сервере редактором vi и вставьте строку с открытым ключом после ssh-rsa.

 Копирование ключа в редакторе VI

Ещё один способ скопировать ключ в authorized_keys — команда echo, которая помещает строку в конец файла. 

echo ssh-rsa строка-публичного-ключа >> /root/.ssh/authorized_keys
 Копирование ключа командой echo

Теперь можно отключить на сервере аутентификацию по паролю и использовать только SSH-ключи.

Создание SSH-ключей на Windows

Если вы используете ОС Windows, то подключиться по SSH к вашему (Linux) серверу можно через PuTTY или OpenSSH. Генерация ключей в этом случае выполняется также при помощи этих программ. 

OpenSSH

Рассмотрим создание ключа через утилиту OpenSSH (доступно для Windows 10/Windows Server 2019 и новее).

Шаги для создания ключей:

  1. Откройте PowerShell от имени администратора.

Если у вас не установлен OpenSSH, выполните команду:

Add-WindowsCapability -Online -Name OpenSSH.Client

Проверить, установлен ли OpenSSH, можно командой:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Client*'

Если статус installed, данное ПО доступно к работе на вашей Windows.

  1. Выполним все в том же PowerShell команду генерации ключа, которая аналогична команде в Linux и выполняет те же функции:
ssh-keygen -t rsa -b 4096 -o -a 100 -C “ваш_email@example.com”
  1. Выберите путь для сохранения. Нажмите Enter, чтобы сохранить ключи в предложенном по умолчанию месте (обычно С:\Users\Ваше имя\.ssh\id_rsa), или укажите другой путь.
  2. Установите пароль для ключа (рекомендуется для большей безопасности).

Теперь у вас есть пара ключей в каталоге .ssh, которую можно использовать для авторизации на сервере.

PuTTY

Рассмотрим вариант генерации ключей через клиент PuTTY.

Запустите приложение PuTTYgen, которое устанавливается вместе с PuTTY.

 Запуск PuTTYgen

Выберите тип ключа SSH2-RSA и нажмите Generate.

Генерация ключа в PuTTY

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

 Процесс генерации ssh ключей

После завершения создания ключей открытый ключ выводится на экран, закрытый хранится в памяти приложения. Чтобы сохранить эти ключи, нажмите Save public key и Save private key. Укажите расположение файлов с ключами. 

 Сохранение ключей в PuTTY

При сохранении закрытого ключа, если не заполнено поле Key passphrase, появится запрос «Хотите ли вы сохранить ключ без секретной фразы?»

 Запрос на сохранение ключа без секретной фразы

Теперь открытый ключ необходимо скопировать на сервер в файл authorized_keys. Используйте WinSCP или другой клиент для работы с файлами на удалённом Linux-сервере. Вы можете скопировать файл с открытым ключом целиком на сервер, чтоб его копия хранилась в папке .ssh

 Копирование открытого ключа на сервер

Откройте файл authorized_keys через WinSCP и файл, в который вы сохранили открытый ключ (public), на локальном компьютере текстовым редактором. Скопируйте значение ключа, сохраните и закройте файл в WinSCP.

Сохранение ключа в файле в WinSCP

При запуске PuTTY укажите путь к закрытому ключу на локальном компьютере. Для этого во вкладке Connections → Auth выберите необходимый путь.

 Указание пути к закрытому ключу

Теперь можно отключить на сервере аутентификацию по паролю и использовать только SSH-ключи.

Отключение аутентификации по паролю

Подключитесь к серверу по SSH, используя пароль, и откройте файл sshd_config для редактирования (например, с помощью текстового редактора Vi).

# vi /etc/ssh/sshd_config

Убедитесь, что указан правильный путь к открытым ключам SSH, поставьте значение параметра PasswordAuthentication no.

 Проверка пути к открытым ключам

Перезапустите службу sshd:

# systemctl restart sshd

Подключитесь к серверу по SSH без использования пароля. Например, запустите PuTTY, проверьте, что во вкладке Connections -> Auth содержится путь к закрытому ключу и откройте подключение.

Login as: root
Authenticating with public key “rsa-key-20230205”
Last login: Sun Feb  5 13:11:24 2023 from 1.1.1.1

В случае успешной аутентификации по SSH-ключу вы получите доступ к командной строке сервера и сообщение вида Authenticating with public key "rsa-key-20230205", где rsa-key-20230205 — имя применённого закрытого ключа, указанное вами в файле authorized_keys.

Этот материал был полезен?

Скидка 25% новым клиентам!
Закажи сервер сегодня и получи скидку на первый месяц аренды!