Linux и PowerShell: Создание ключевой пары

Опубликовано

На все данные актуальны

В этом разделе мы рассмотрим процесс создания ключевых пар с помощью инструмента ssh-keygen в Windows через PowerShell. Однако процедура создания ключевой пары в Linux через терминал будет аналогичной.

Рекомендуем при создании ключевой пары защитить её парольной фразой. Это добавит дополнительный уровень безопасности, так как каждый раз при использовании ключа будет требоваться ввод этой фразы. Если приватный ключ окажется в чужих руках, наличие парольной фразы существенно усложнит его несанкционированное использование. Выбирая парольную фразу, придерживайтесь тех же принципов, что и при создании обычных паролей: обеспечьте достаточную длину и сложность.

Предварительные требования

  1. На вашем устройстве должен быть установлен клиент OpenSSH. Процесс установки OpenSSH Client описан в разделе “Установка клиента SSH”.
  2. Для систем на базе Linux должен быть доступен терминал или PowerShell для систем на базе Windows. О том, как установить Powershell, вы можете ознакомиться в гайде “Установка PowerShell в Windows”.

Процесс создания ключевой пары

  1. Откройте терминал на Linux или PowerShell на Windows.
  2. Введите команду:
        ssh-keygen

    После запуска команды отобразится приглашение на ввод пути и имени ключевой пары:
        PS C:\WINDOWS\system32> ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (C:\Users\username/.ssh/id_rsa): 
    
  3. Укажите путь для сохранения ключевой пары и её имя, завершив ввод нажатием клавиши Enter на клавиатуре. Или оставьте поле пустым и нажмите Enter, чтобы сохранить ключевую пару  с именем указанным по умолчанию.

    Если ключевая пара с указанным именем уже существует в каталоге, то отобразится следующее сообщение и запрос:
        C:\Users\usеrname/.ssh/id_rsa already exists.
    Overwrite (y/n)?

    Выберите вариант ответа, нажатием соответствующей клавиши клавиатуры:

    y – Перезаписать существующую ключевую пару.
    Старый ключ будет перезаписан, этот процесс необратим и вы не сможете выполнять аутентификацию с помощью утраченного приватного ключа, если он был нужен. 
    n – Отменить генерацию ключевой пары.
    Процесс создания ключевой пары будет прерван и вам потребуется заново начать генерацию ключевой пары, указав другой путь или другое имя ключевой пары, чтобы избежать перезаписи существующей.

    Если имя уникально или вы выбрали перезапись ключа, то отобразится запрос на ввод парольной фразы:
        Enter passphrase (empty for no passphrase):

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

    Если вы вводили парольную фразу, то отобразится запрос на подтверждение парольной фразы:
        Enter same passphrase again:

    Повторно введите парольную фразу и нажмите Enter.

    Если парольные фразы не совпадают, вам будет предложено ввести их заново:
        Passphrases do not match. Try again.
    Enter passphrase (empty for no passphrase):
    Когда ввод парольной фразы завершен, начнется генерация ключевой пары, и вы увидите что-то подобное:
        Your identification has been saved in C:\Users\usеrname/.ssh/id_rsa.
    Your public key has been saved in C:\Users\usеrname/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:PU+mat9z2eAl2GarVUy/t0jGs9Hn1AsXtdYbOZP3/sA fas\usеrname@compname
    The key's randomart image is:
    +---[RSA 3072]----+
    |                 |
    |                 |
    |                o|
    |         .    o.B|
    |        Soo oo X*|
    |           *o.O.%|
    |         . ..@E%*|
    |        .. .+.%=*|
    |       .... o* o=|
    +----[SHA256]-----+
    PS C:\WINDOWS\system32>
    По указанному вами пути будут сохранены два файла с указанным вами именем: 
    Файл с расширением *.pub (по умолчанию id_rsa.pub) – Открытый ключ, который нужно отправить на виртуальную машину или сервер, которым вы хотите управлять.
    Файл без расширения (по умолчанию id_rsa) – Закрытый ключ, конфиденциальность которого вам нужно сохранить.

Что дальше?

После генерации ключевой пары, публичный ключ можно скопировать на сервер, как это описано в разделе “Копирование ключа на сервер”.

Дополнительно

Команда ssh-keygen имеет большое количество настраиваемых параметров и опций, подробно ознакомиться с ними вы можете в “Инструкция по использованию команды SSH-keygen”.

Вот некоторые из наиболее часто используемых параметров команды ssh-keygen:

  • -t: Указывает тип ключа. 
    По умолчанию генерируется ключевая пара с использованием алгоритма шифрования RSA. Используя ключ -t, вы можете выбрать один из следующих алгоритмов шифрования для генерации ключей: ecdsa, ecdsa-sk, ed25519, ed25519-sk, rsa, указав их в качестве аргумента.

    Например:
        ssh-keygen -t ed25519

    Эта команда начнет генерацию ключевой пары с использованием алгоритма шифрования Ed25519.
  • -b: Задаёт длину ключа в битах.
    По умолчанию генерируется ключевая пара размером 3072 бит. Используя ключ – b, вы можете задать иную длину ключа. Эта опция часто используется совместно с ключом -t

    Например:
        ssh-keygen -t ecdsa -b 4096

    Эта команда начнет генерацию ключевой пары с использованием алгоритма шифрования ecdsa и длиной 4096 бит.
  • -C: Добавляет комментарий к публичному ключу.
    Используя этот ключ команды вы можете задать комментарий к публичному ключу, чтобы его идентифицировать. Это полезно, если ключей на сервере много и нужно ими управлять.

    Например:
        ssh-keygen -t rsa -C your_email@example.com

    Начнет генерацию ключевой пары с использованием алгоритма шифрования RSA и комментарием: “your_email@example.com”.
  • -f: Указывает путь и имя ключевой пары. 
    В команде генерации ключевой пары вы можете указать путь и имя ключевой пары, указав их в качестве аргумента ключа -f. Директория (каталог), куда вы собираетесь сохранить ключевую пару, должна существовать, иначе ключевая пара сгенерирована не будет.

    Например:
        ssh-keygen -t rsa -f D:/test/mykey

    Начнет генерацию ключевой пары с использованием алгоритма шифрования RSA, ключевая пара будет называться mykey и располагаться в директории D:/test/
  • -p: Устанавливает новую парольную фразу для приватного ключа. 
    Этот ключ параметр часто используется совместно с ключами -N и -P, который позволяет указать соответственно новую и старую парольную фразу. Если старая и(или) новая парольная фраза не будет указана, то они будут запрошены при запуске команды. 

    Например:
        ssh-keygen -f ~/.ssh/existingkey -p -P old_passphrase -N new_passphrase

    Изменит парольную фразу закрытого ключа existingkey, находящегося в папке .ssh текущего пользователя в Linux, на новую парольную фразу: new_passphrase. В процессе изменения старая парольная фраза у пользователя запрашиваться не будет, для подтверждения изменений будет использована парольная фраза  old_passphrase.
  • -y: Создаёт публичный ключ на основе вашего приватного ключа. 
    Это может быть полезно, если у вас есть приватный ключ, но публичный потерян или повреждён.

    Например:
        ssh-keygen -y -f c:\users\maxwell.ssh\mykey
    
    Эта команда сгенерирует публичный ключ на основе приватного ключа mykey, находящегося в папке пользователя Windows maxwell.