Утилита ssh-keygen#

ssh-keygen – это утилита, с помощью которой можно создавать и преобразовывать ключи аутентификации для ssh и управлять ими. Утилита создает RSA-ключи для использования с SSH-протоколом версии 1 и ключи RSA или DSA для использования с SSH-протоколом версии 2. При вызове без аргументов ssh-keygen по умолчанию сгенерирует RSA-ключ для использования в соединениях по протоколу SSH версии 2.

Чаще всего данная утилита запускается пользователем один раз для создания ключа аутентификации в ~/.ssh/identity, ~/.ssh/id_dsa или ~/.ssh/id_rsa. Пользователь с административными полномочиями может использовать ее для генерации ключей хоста в /etc/rc.

Утилита генерирует ключ и запрашивает файл для хранения закрытого ключа. Открытый ключ хранится в файле с тем же именем, но с добавлением .pub. Также происходит запрос парольной фразы. Она может быть пустой (ключи хоста должны иметь пустую парольную фразу), или ей может стать строка произвольной длины. Парольная фраза аналогична паролю, за исключением того, что она может состоять из нескольких слов, знаков препинания, цифр, пробелов или набора символов. Если парольная фраза утеряна или забыта, необходимо сгенерировать новый ключ и скопировать соответствующий открытый ключ на другие машины.

Синтаксис утилиты:

ssh-keygen <options>

Где <options> - опции.

Часто используемые опции утилиты представлены в таблице ниже.

Опция

Описание

-A

Создание всех типов ключей хоста по умолчанию (rsa, ecdsa и ed25519) при их отсутствии. Используется /etc/rc для генерации новых ключей хоста

-a <rounds>

Указание количества используемых раундов KDF (функция формирования ключа, в настоящее время bcrypt_pbkdf) при сохранении закрытого ключа. Значение по умолчанию – 16

-b <bits>

Указание числа бит <bits> в создаваемом ключе. Для ключей RSA минимальный размер - 1024 бит, по умолчанию - 3072 (рекомендуемое значение). Ключи DSA должны содержать ровно 1024 бит. Для ключей ECDSA опция определяет длину ключа путем выбора одного из трех размеров эллиптической кривой: 256, 384 или 521 бит. Ключи ECDSA-SK, Ed25519 и Ed25519-SK имеют фиксированную длину, и опция -b не учитывается

-c

Изменение комментария в файлах закрытого и открытого ключей

-E <fingerprint_hash>

Определение алгоритма хеширования <fingerprint_hash>, используемый при отображении отпечатков ключей. Допустимые параметры: md5 и sha256. Значение по умолчанию – sha256

-f <filename>

Установка имени файла <filename> ключа

-h

Создание сертификата хоста вместо сертификата пользователя

-l

Раскрытие отпечатка открытого ключа из указанного файла

-m <key_format>

Определение типа формата при создании ключа <key_format>. Поддерживаемые форматы ключей: RFC4716 – открытый или закрытый ключ RFC 4716/SSH2; PKCS8 – открытый или закрытый ключ PKCS8; PEM – открытый ключ PEM

-n <principals>

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

-N <new_passphrase>

Ввод новой парольной фразы

-p

Изменение парольной фразы файла закрытого ключа вместо создания нового закрытого ключа

-R <hostname>

Удаление всех ключей, относящихся к указанному хосту, из файла known_hosts. Рекомендуется для удаления хешированных хостов

-s <ca_key>

Подпись открытого ключа при помощи ключа CA

-t <type_key>

Определение типа ключа при создании. Возможные значения: dsa, ecdsa, ecdsa-sk, ed25519, ed25519-sk или rsa. Опция также может использоваться для указания желаемого типа подписи сертификатов с использованием ключа RSA CA. Доступные варианты подписи RSA: ssh-rsa (подписи SHA1, не рекомендуется), rsa-sha2-256

-y

Считывание закрытого файла формата OpenSSH и вывод открытого ключа в стандартный вывод

Примеры использования#

  • Для генерации ключа в интерактивном режиме используйте команду:

    ssh-keygen
    
  • Для генерации ключа ed25519 с помощью 32 раундов функции получения ключа и его последующим сохранением в определенном файле используйте команду:

    ssh-keygen -t ed25519 -a 32 -f ~/.ssh/<filename>
    

    В результате выполнения команды в файл <filename> сохранится сгенерированный ключ.

  • Для создания RSA-ключа 4096 бит воспользуйтесь командой:

    ssh-keygen -t rsa -b 4096
    

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

  • Для удаления ключей хоста из файла known_hosts воспользуйтесь командой:

    ssh-keygen -R <remote_host>
    

    В результате выполнения команды из хоста <remote_host> удалятся ключи. Рекомендуется в случае, когда у хоста есть новый ключ SSH.

  • Для получения отпечатка ключа в MD5 Hex из указанного файла используйте команду:

    ssh-keygen -l -E md5 -f ~/.ssh/<filename>
    

    В результате выполнения команды из файла <filename> получится отпечаток ключа.

  • Для изменения пароля ключа и сохранения его в определенном файле, введите команду:

    ssh-keygen -p -f ~/.ssh/<filename>
    

    В результате выполнения команды в файл <filename> сохранится пароль ключа.

  • Для изменения формата ключа (в примере команда с OPENSSH на PEM) используйте команду:

    ssh-keygen -p -N "" -m PEM -f ~/.ssh/OpenSSH_private_key
    

    Файл при выполнении команды перезапишется.

  • Для получения открытого ключа из секретного ключа воспользуйтесь командой:

    ssh-keygen -y -f ~/.ssh/OpenSSH_private_key