SSH-KEYGEN(1)

НАЗВА
ssh-keygen - Допоміжна програма OpenSSH для роботи із ключами розпізнавання

КОРОТКИЙ ОПИС
ssh-keygen [-q] [-a раундів] [-b бітність] [-C коментар] [-f вихідний_файл_ключа] [-m формат] [-N нова_парольна_фраза] [-O параметр] [-t ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa] [-w постачальник] [-Z шифр] ssh-keygen -p [-a раундів] [-f файл_ключа] [-m формат] [-N нова_парольна_фраза] [-P стара_парольна_фраза] [-Z шифр] ssh-keygen -i [-f вхідний_файл_ключа] [-m формат_ключа] ssh-keygen -e [-f вхідний_файл_ключа] [-m формат_ключа] ssh-keygen -y [-f вхідний_файл_ключа] ssh-keygen -c [-a раундів] [-C коментар] [-f файл_ключа] [-P парольна_фраза] ssh-keygen -l [-v] [-E геш_відбитка] [-f вхідний_файл_ключа] ssh-keygen -B [-f вхідний_файл_ключа] ssh-keygen -D pkcs11 ssh-keygen -F назва_машини [-lv] [-f файл_відомих_машин] ssh-keygen -H [-f файл_відомих_машин] ssh-keygen -K [-a раундів] [-w постачальник] ssh-keygen -R назва_машини [-f файл_відомих_машин] ssh-keygen -r назва_машини [-g] [-f вхідний_файл_ключа] ssh-keygen -M generate [-O параметр] вихідний_файл ssh-keygen -M screen [-f вхідний_файл] [-O параметр] вихідний_файл ssh-keygen -I сертифікат_ідентичності -s ca-ключ [-hU] [-D постачальник_pkcs11] [-n керівник] [-O параметр] [-V інтервал_чинності] [-z серійний_номер] file ... ssh-keygen -L [-f вхідний_файл_ключа] ssh-keygen -A [-a раундів] [-f префікс_до_шляху] ssh-keygen -k -f файл_krl [-u] [-s публічний_ca] [-z номер_версії] file ... ssh-keygen -Q [-l] -f файл_krl file ... ssh-keygen -Y find-principals [-O параметр] -s файл_сигнатури -f файл_дозволених_підписантів ssh-keygen -Y match-principals -I ідентичність_підписанта -f файл_дозволених_підписантів ssh-keygen -Y check-novalidate [-O параметр] -n простір_імен -s файл_сигнатури ssh-keygen -Y sign [-O параметр] -f файл_ключа -n простір_імен file ... ssh-keygen -Y verify [-O параметр] -f файл_дозволених_підписантів -I ідентичність_підписанта -n простір_імен -s файл_сигнатури [-r файл_відкликання]

ОПИС
ssh-keygen створює ключі розпізнавання, керує ключами розпізнавання та перетворює ключі розпізнавання для ssh(1). ssh-keygen може створювати ключі для використання версії протоколу SSH 2.

Тип згенерованого ключа визначається параметром -t. Якщо виконати без жодних аргументів, ssh-keygen згенерує ключ Ed25519.

ssh-keygen також використовується для генерування груп, що використовуються в обміні груп Діффі-Геллмана (DH-GEX). Детальніше дивіться MODULI GENERATION.

І нарешті, ssh-keygen можна використовувати, щоб генерувати та оновлювати Списки Відкликання Ключів, і щоб тестувати, чи надані ключі були відкликані через список. Див. розділ KEY REVOCATION LISTS щодо подробиць.

Зазвичай кожний користувач, що хоче використовувати SSH з автентифікацією відкритим ключем запускає це один раз, щоб створити ключ автентифікації в in ~/.ssh/id_ecdsa, ~/.ssh/id_ecdsa_sk, ~/.ssh/id_ed25519, ~/.ssh/id_ed25519_sk або ~/.ssh/id_rsa. Додатково, системний адміністратор може використовувати це, що генерувати ключі машин, як видно в /etc/rc.

Зазвичай, ця програма генерує ключ і питає про файл, в якому зберегти приватний ключ. Відкритий ключ зберігається у файлі з таким самим ім'ям, але з доданим “.pub”. Програма також запитує фразу пароля Фраза пароля може бути порожньою, що означає її відсутність (ключі машин повинні мати порожні фрази пароля), або вона може бути рядком довільної довжини. Фраза пароля схожа на пароль, окрім того, що вона може містити декілька слів, пунктуацію, числа, пробіли або будь-яку послідовність символів. Добрі фрази пароля містять 10-30 символів, не є простими реченнями і не є легковгадуваними (англійська проза має ентропію лише 1-2 бітів на символ, і надає досить погані фрази паролів), і містити суміш верхнього та нижнього регістрів, цифр та символи, які не є літерами чи цифрами. Фразу пароля можна змінити через параметр -p.

Втрачену фразу пароля відновити неможливо. Якщо фразу пароля втрачено або забуто, потрібно згенерувати новий ключ та скопіювати відповідний відкритий ключ на інші машини.

ssh-keygen, типово, записує ключі у форматі, який є специфічний OpenSSH. Цей формат є бажаним, оскільки він забезпечує кращий захист для зберігання ключів, а також уможливлює зберігання коментарів до ключів у самому файлі закритого ключа. Коментар до ключа може бути корисним для ідентифікації ключа. Коментар ініціалізується значенням “user@host” при створенні ключа, але коментар можна змінити за допомогою параметра -c.

У ssh-keygen зберігається можливість записувати у раніше використовуваному форматі PEM закритих ключів за допомогою прапорця -m. Цим можна скористатися при створенні ключів, а наявні ключі у новому форматі можна перетворити за допомогою цього параметра у поєднанні із прапорцем -p (змінити пароль).

Після створення ключа, ssh-keygen запитає куди помістити ключі, щоб вони були активованими.

Параметри є такими:

-A  Створити ключі вузла для усіх стандартних типів (rsa, dsa, ecdsa і ed25519), якщо їх ще не існує. Ключі вузла буде створено із типовим шляхом до файла ключа, порожнім паролем, типовою кількістю бітів для типу ключа та типовим коментарем. Якщо також було вказано -f, його аргумент буде використано як префікс до типового шляху для отриманих файлів ключа вузла. Цим користується /etc/rc для створення ключів вузлів.

-a цикли
    При збереженні закритого ключа цей параметр визначає кількість використаних циклів KDF («key derivation function» або «функція виведення ключів», у поточній версії bcrypt_pbkdf(3)). Чим більшим буде значення, тим повільнішою буде перевірка пароля і вищою стійкість до зламу пароля перебором (якщо ключі буде викрадено). Типовою кількістю циклів є 16.

-B  Вивести контрольну суму bubblebabble для вказаного файла закритого або відкритого ключа.

-b бітність
    Визначає кількість бітів у створюваному ключі. Для ключів RSA найменшим розміром є 1024 біти, типовим — 3072 біти. Як правило, 3072 біти вважається достатнім. Для ключів ECDSA прапорець -b визначає довжину ключа, вибираючи один із трьох розмірів еліптичної кривої: 256, 384 або 521 біт. Спроба використання довжини бітів, відмінної від цих трьох значень, для ключів ECDSA буде не вдалою. Ключі ECDSA-SK, Ed25519 і Ed25519-SK мають фіксовану довжину і прапорець -b ігноруватиметься.

-C коментар
    Додає новий коментар.

-c  Надсилає запит щодо зміни коментаря у файлах закритого і відкритого ключів. Програма надішле запит щодо файла, у якому містяться закриті ключі, щодо пароля, якщо у ключа він є, і щодо нового коментаря.

-D pkcs11
    Отримати відкриті ключі, які надаються бібліотекою спільного користування PKCS#11 pkcs11. При використанні у поєднанні із -s цей параметр вказує, що ключ служби сертифікації (CA) зберігається у жетоні PKCS#11 (див. розділ СЕРТИФІКАТИ, щоб дізнатися більше).

-E геш_відбитка
    Визначає алгоритм гешування для відображення відбитків ключів. Правильними значеннями є: “md5” і “sha256”. Типове — “sha256”.

-e  Використання цього параметра призведе до читання файла закритого або відкритого ключа OpenSSH і вивести до stdout відкритий ключ в одному форматі, вказаного параметром -m. Типовим форматом експортування є “RFC4716”. За допомогою цього параметра можна експортувати ключі OpenSSH для використання в інших програмах, зокрема декількох комерційних реалізацій SSH.

-F назва_машини | [назва_машини]:порт
    Шукати вказаний вузол назва_машини (із необов'язковим номером порту) у файлі known_hosts, вивівши усі знайдені записи. Цей параметр є корисним для пошуку хешованих назв або адрес вузлів. Також можна використати у поєднанні із параметром -H для виведення знайдених ключів у хешованому форматі.

-f назва_файла
    Визначає назву файла ключа.

-g  Використовувати загальний формат DNS, коли друкуємо записи ресурсів відбитків пальців за допомогою команди -r.

-H  Хешувати файл known_hosts. Замінює усі назви і адреси вузлів із хешованими представленнями у вказаному файлі; початкові дані буде пересунуто до файла із суфіксом .old. Ці хеші може бути без проблем використано в ssh і sshd, але вони не надають безпосереднього доступу до ідентифікаційних даних, якщо вміст файла буде кимось викрадено. Використання цього параметра не призведе до зміни наявних хешованих назв вузлів, тому його можна безпечно використовувати для файлів, у яких поєднуються хешовані і нехешованими назвами.

-h  При підписуванні ключа створити сертифікат вузла, замість сертифіката користувача. Див. розділ СЕРТИФІКАТИ, щоб дізнатися більше.

-I профіль_сертифікації
    Вказати профіль ключа при підписуванні відкритого ключа. Див. розділ розділ СЕРТИФІКАТИ, щоб дізнатися більше.

-i  Використання цього параметра призведе до читання нешифрованого файла закритого (або відкритого) ключа у форматі, вказаному параметром -m, і виведення сумісного із OpenSSH закритого (або відкритого) ключа до stdout. За допомогою цього параметра можна імпортувати ключі з іншого програмного забезпечення, зокрема декількох комерційних реалізацій SSH. Типовим форматом є “RFC4716”.

-K  Завантажує постійні ключі з автентифікатора FIDO. Файли відкритого і закритого ключа записуватимуться в поточний каталог для кожного завантаженого ключа. Якщо додано багато автентифікаторів FIDO, ключі завантажуватимуться з першого долученого автентифікатора. Див. розділ the ЗАСІБ РОЗПІЗНАВАННЯ FIDO, щоб дізнатися більше.

-k  Створити файл KRL. У цьому режимі ssh-keygen створить файл KRL у місці, вказаному за допомогою прапорця -f, який призводить до відкликання усіх ключів або сертифікатів, які вказано у рядку команди. Ключі або сертифікати, які слід відкликати, можна вказати за файлом відкритого ключа або за допомогою формату, описаного у розділі СПИСКИ ВІДКЛИКАННЯ КЛЮЧІВ.

-L  Виводить вміст одного або білше сертифікатів.

-l  Вивести відбиток вказаного файла відкритого ключа. ssh-keygen намагається знайти відповідний файл відкритого ключа і вивести його відбиток. Якщо поєднати із параметром -v, разом із ключем буде показано зображення із символів ASCII, яке відповідає ключу.

-M generate
    Створити параметри кандидата групового обміну Діффі-Гелмана (DH-GEX) для остаточного використання у методах обміну ключами ‘diffie-hellman-group-exchange-*’. Створені під час цієї дії числа має бути надалі перевірено перед використанням . Див. розділ СТВОРЕННЯ МОДУЛІВ, щоб дізнатися більше.

-M screen
    Перевірити параметри кандидата для групового обміну Діффі-Гелмана. Приймає список чисел-кандидатів і перевіряє їх на безпечність (Софі Жермен) простих чисел з використанням прийнятних породжувачів груп. Результати цієї дії може бути додано до файла /etc/ssh/moduli. Див. розділ СТВОРЕННЯ МОДУЛІВ, щоб дізнатися більше.

-m формат_ключа
    Вказати формат ключа для створення ключів, параметри перетворення -i (імпорт), -e (експорт) і дії зі зміни пароля -p. Останніми можна скористатися для перетворення форматів закритих ключів OpenSSH і закритих ключів PEM. Підтримувані формати ключів: “RFC4716” (відкритий або закритий ключ RFC 4716/SSH2), “PKCS8” (відкритий або закритий ключ PKCS8) або “PEM” (відкритий ключ PEM). Типово, OpenSSH запише новостворені закриті ключі у власному форматі, але при перетворенні типовим форматом експортування відкритих ключів є “RFC4716”. Встановлення формату “PEM” при створенні або оновленні підтримуваного типу закритого ключа призведе до того, що ключ буде збережено у застарілому форматі закритих ключів PEM.

-N нова_парольна_фраза
    Надає нову парольну фразу.

-n реєстраційні_записи
    Вказати один або декілька реєстраційних записів (назв облікових записів користувачів або вузлів), які слід включити до сертифіката при підписуванні ключів. Можна вказати декілька реєстраційних записів, відокремивши записи комами. Див. розділ СЕРТИФІКАТИ, щоб дізнатися більше.

-O параметр
    Вказати параметр ключ/значення. Є специфічними до дії, запит на виконання якого було надіслано до ssh-keygen.

    При підписуванні сертифікатів тут можна вказати один із параметрів зі списку розділу СЕРТИФІКАТИ.

    При виконанні створення або перевірки модулів може бути вказано один з параметрів зі списку у розділі СТВОРЕННЯ МОДУЛІВ.

    При створенні ключів на основі ідентифікатора FIDO можна вказати один із параметрів зі списку розділу ЗАСІБ РОЗПІЗНАВАННЯ FIDO.

    Коли виконуємо параметри, пов'язані з підписами, за допомогою прапорця -Y, приймаються наступні параметри:

    hashalg=алгоритм
        Вибирає алгоритм хешування повідомлення для підпису. Підтримувані алгоритми “sha256” та “sha512.” Типовим є “sha512.”

    print-pubkey
        Вивести відкритий ключ повністю до стандартного виведення після перевірки підпису.

    verify-time=часова_позначка
        Вказує момент часу, який слід використати при перевірці підписів замість поточного моменту часу. Момент часу слід вказувати як дату у форматі РРРРММДД[Z] або час у форматі РРРРММДДГГХХ[СС][Z]. Записи дати і часу буде оброблено у поточному часовому поясі системи, якщо не вказано суфікс Z, і у часовому поясі всесвітнього часу, якщо суфікс вказано.

    Коли відбувається створення записів DNS SSHFP на основі відкритих ключів за допомогою прапорця -r, приймаються наступні параметри:

    hashalg=алгоритм
        Вибирає алгоритм хешування при виведення записів SSHFP за допомогою прапорця -D. Підтримувані алгоритми “sha1” та “sha256”. Типовим є виведення даних для обох.

    Параметр -O можна вказувати декілька разів.

-P пароль
    Надає (старий) пароль.

-p  Надіслати запит щодо зміни пароля до файла закритого ключа замість створення закритого ключа. Програма надішле запит щодо файла, у якому зберігається закритий ключ, для старого пароля. Для нового пароля запит щодо введення буде надіслано двічі.

-Q  Перевірити, чи було ключі відкликано у KRL. Якщо також вказано параметр -l, буде виведено вміст KRL.

-q  Придушити виведення повідомлень ssh-keygen.

-R назва_вузла | [назва_вузла]:порт
    Вилучає усі ключі, що належать до вказаної назви_вузла (із необов'язковим номером порту) з файла known_hosts. Цей параметр корисний для вилучення хешованих вузлів (див. параметр -H вище).

-r назва_вузла
    Вивести запис ресурсу відбитка SSHFP із назвою назва_вузла для вказаного файла відкритого ключа.

-s ключ_ca
    Сертифікувати (підписати) відкритий ключ за допомогою вказаного ключа служби сертифікації (CA). Див. розділ СЕРТИФІКАТИ, щоб дізнатися більше.

    При створенні KRL -s визначає шлях до файла відкритого ключа служби сертифікації (CA), який буде використано для відкликання сертифікатів безпосередньо за ідентифікатором ключа або серійним номером. Див. розділ СПИСКИ ВІДКЛИКАННЯ КЛЮЧІВ, щоб дізнатися більше.

-t | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa
    Вказує тип ключа для створення. Можливі значення: “ecdsa”, “ecdsa-sk”, “ed25519 (типовий варіант)”, “ed25519-sk” або “rsa”.

    Цим прапорцем можна скористатися для визначення бажаного типу підпису при підписуванні сертифікатів за допомогою ключа RSA служби сертифікації. Варіантами підписів RSA є “ssh-rsa” (підписи SHA1, не рекомендовано), “rsa-sha2-256” і “rsa-sha2-512” (типовий для ключів RSA).

-U  При використанні у поєднанні із -s або -Y sign цей параметр вказує, що ключ служби сертифікації (CA) зберігається у ssh-agent(1). Див. розділ СЕРТИФІКАТИ, щоб дізнатися більше.

-u  Оновити KRL. Якщо вказано разом із -k, ключі зі списку, отриманого з рядка команди, буде додано до наявного KRL, а не записано до новоствореного KRL.

-V validity_interval
    Вказати інтервал чинності при підписування сертифіката. Інтервал чинності може складатися з одного моменту часу, що означатиме, що сертифікат є чинним з поточного моменту і до вказаного моменту часу, або з відокремлених двокрапкою двох моментів часу, якщо слід вказати інтервал часу явним чином.

    Початковий час можна вказати так:
    •   Рядок “always” для позначення того, що у сертифіката немає вказаного початкового часу.
    •   Дата або час у часовому поясі системи у форматі РРРРММДД або РРРРММДДГГХХ[СС].
    •   Дата або час у часовому поясі UTC у форматі РРРРММДДZ або РРРРММДДГГХХ[СС]Z.
    •   Відносний (щодо поточного) запис часу системи, який складається зі знаку «мінус», за яким вказано інтервал у форматі, описаному у розділі «ФОРМАТИ ЧАСУ» сторінки підручника sshd_config(5).
    •   Простої кількості секунд від початку епохи (1 січня 1970 року 00:00:00 UTC) у форматі шістнадцяткового числа, що починається з “0x”.

    Кінцевий час можна вказати у спосіб, подібний до початкового часу:
    •   Рядок “forever” для позначення того, що у сертифіката немає вказаного кінцевого часу.
    •   Дата або час у часовому поясі системи у форматі РРРРММДД або РРРРММДДГГХХ[СС].
    •   Дата або час у часовому поясі UTC у форматі РРРРММДДZ або РРРРММДДГГХХ[СС]Z.
    •   Відносний (щодо поточного часу системи) запис часу, який складається зі знаку «плюс», за яким вказано інтервал у форматі, описаному у розділі «ФОРМАТИ ЧАСУ» сторінки підручника sshd_config(5).
    •   Простої кількості секунд від початку епохи (1 січня 1970 року 00:00:00 UTC) у форматі шістнадцяткового числа, що починається з “0x”.

    Приклад:

    +52w1d
        Чинний від поточного моменту часу протягом 52 тижнів і одного дня.

    -4w:+4w
        Чинний від чотирьох тижнів тому до чотирьох тижнів з поточного моменту часу.

    20100101123000:20110101123000
        Чинний від 12:30 1 січня 2010 року до 12:30 1 січня 2011 року.

    20100101123000Z:20110101123000Z
        Те саме, але у часовому поясі всесвітнього часу (UTC), а не у часовому поясі системи.

    -1d:20110101
        Чинний від учора до опівночі 1 січня 2011 року.

    0x1:0x2000000000
        Чинний із приблизно початку 1970 року до травня 2033 року.

    -1m:forever
        Чинний від однієї хвилини тому і немає строку завершення дії.

-v  Режим докладних повідомлень Наказує ssh-keygen виводити діагностичні повідомлення щодо поступу обробки завдань. Корисно для діагностики створення модулів. Додавання декількох параметрів -v підвищує докладність. Максимально докладним є режим із 3 параметрами.

-w provider
    Задає шлях до бібліотеки, яку буде використано при створенні будь-яких ключів FIDO на боці засобу розпізнавання. Перевизначає типове використання вбудованої підтримки HID USB.

-Y find-principals
    Знайти реєстраційні запис, які пов'язано із відкритим ключем підпису, який надано за допомогою прапорця -s у файлі уповноважених підписантів, який вказано за допомогою прапорця -f. Формат файла дозволених підписантів задокументовано у розділі ДОЗВОЛЕНІ ПІДПИСАНТИ нижче. Якщо буде знайдено один або декілька відповідних реєстраційних записів, їх буде повернуто до стандартного виведення.

-Y match-principals
    Знайти реєстраційний запис, який відповідає назві реєстраційного запису, вказаній за допомогою прапорця -I, у файлі уповноважених підписантів, вказаному за допомогою прапорця -f. Якщо буде знайдено один або декілька відповідних реєстраційних записи, їх буде повернуто до стандартного виведення.

-Y check-novalidate
    Перевірити створений підпис за допомогою ssh-keygen -Y sign так коректність структури. Перевірку не буде пройдено, якщо підпис походить від уповноваженого підписанта. При перевірці підпису ssh-keygen отримує повідомлення та простір назв підпису на стандартному джерелі вхідних даних за допомогою прапорця -n. Також має бути надано файл, що містить відповідний підпис, за допомогою прапорця -s. Сигналом про проходження перевірки для ssh-keygen буде повернутий нульовий стан виходу.

-Y sign
    Криптографічно підписати файл або якісь дані за допомогою ключа SSH. При підписуванні ssh-keygen приймає нуль або більше файлів у рядку команди. Якщо файлів не вказано, ssh-keygen підпише дані, які надано зі стандартного джерела вхідних даних. Підписи буде записано до каталогу файла вхідних даних до файла із назвою файла вхідних даних із додаванням суфікса “.sig” або до стандартного виведення, якщо повідомлення, яке слід підписати, було прочитано зі стандартного джерела вхідних даних.

    Ключ, який буде використано для підписування, задається за допомогою параметра -f і може бути або закритим ключем або відкритим ключем із закритою частиною, яка доступна за допомогою ssh-agent(1). Додатковий простір назв підписів, який використовують для запобігання конфліктам між різними областями використання (наприклад, підписування файлів і підписування повідомлень електронної пошти), має бути надано за допомогою прапорця -n. Просторами назв є довільні рядки, зокрема “file” для підписування файлів, “email” для підписування повідомлень електронної пошти. Для нетипових використань рекомендуємо використовувати назви у форматі НАЗВА_ПРОСТОРУ@ВАШ.ДОМЕН, щоб створювати однозначну прив'язку просторів назв.

-Y verify
    Надіслати запит щодо перевірки створеного підпису за допомогою ssh-keygen -Y sign, як це описано вище. При перевірці підпису ssh-keygen приймає повідомлення на стандартному джерелі вхідних даних і простір назв, який вказано за допомогою прапорця -n. Також має бути вказано файл, що містить відповідний підпис, за допомогою прапорця -s, а також профіль підписанта за допомогою прапорця -I та список дозволених підписантів за допомогою прапорця -f. Формат файла дозволених підписантів документовано у розділі ДОЗВОЛЕНІ ПІДПИСАНТИ нижче. Файл, у якому містяться дані щодо відкликаних ключів, можна передати за допомогою прапорця -r. У файлі відкликаних ключів може бути KRL або список відкритих ключів по одному на рядок. Сигналом про проходження уповноваженим підписантом перевірки для ssh-keygen буде повернутий нульовий стан виходу.

-y  Використання цього параметра призведе до читання файла закритого ключа у форматі OpenSSH і вивести відкритий ключ OpenSSH до stdout.

-Z шифр
    Вказує шифр, яким слід скористатися для шифрування при записуванні файла закритого ключа у форматі OpenSSH. Список доступних шифрів можна отримати за допомогою команди "ssh -Q cipher". Типовим варіантом є “aes256-ctr”.

-z серійний_номер
    Вказує серійний номер, який слід вбудувати до сертифіката для того, щоб цей сертифікат відрізнявся від інших сертифікатів з тієї самої служби сертифікації (CA). Якщо серійний_номер матиме префікс ‘+’, серійний номер збільшуватиметься з кожним сертифікатом, підписаним в одинарному рядку команди. Типовим серійним номером є нуль.

    При створенні KRL прапорець -z буде використано для задання номеру версії KRL.

СТВОРЕННЯ МОДУЛІВ
ssh-keygen можна скористатися для породження груп для протоколу обміну групами Діффі-Гелмана (DH-GEX). Породження цих груп є двокроковим процесом: спочатку, програма породжує прості числа — кандидати за допомогою швидкого, але вимогливого до об'єму пам'яті процесу. Ці кандидати — прості числа потім на наступному кроці перевіряють на придатність (вимогливий до ресурсів процесора процес).

Породження простих чисел виконують за допомогою параметра -M generate. Бажану довжину простих чисел можна вказати за допомогою параметра -O bits. Приклад:

    # ssh-keygen -M generate -O bits=2048 moduli-2048.candidates

Типово, пошук простих чисел розпочинається з випадкової позиції у бажаному діапазоні довжин. Перевизначити таку поведінку можна за допомогою параметра -O start, який вказує іншу початкову точку (у форматі шістнадцяткового числа).

Щойно буде створено набір кандидатів, його має бути перевірено на придатність. Зробити це можна за допомогою параметра -M screen. У цьому режимі ssh-keygen читатиме кандидати зі стандартного джерела вхідних даних (або файла, який вказано за допомогою параметра -f). Приклад:

    # ssh-keygen -M screen -f moduli-2048.candidates moduli-2048

Типово, кожне число-кандидат підлягає 100 перевіркам на простоту. Перевизначити кількість перевірок можна за допомогою параметра -O prime-tests. Для відповідних простих чисел автоматично буде вибрано значення породжувача ДГ. Якщо бажаним є якийсь інший породжувач, вказати його можна за допомогою параметра -O generator. Коректними значеннями для породжувача є 2, 3 і 5.

Перевірені групи ДГ може бути встановлено до /etc/ssh/moduli. Важливо, щоб цей файл містив модулі у діапазоні бітових довжин.

Доступ до деяких параметрів для породження модулів та перевірки можна отримати за допомогою прапорця -O:

lines=число
    Вийти після перевірки вказаної кількості рядків під час перевірки кандидатів ДГ.

start-line=номер-рядка
    Почати перевірку із рядка із вказаним номером під час виконання перевірки кандидатів ДГ.

checkpoint=назва-файла
    Записати останній оброблений рядок до вказаного файла під час виконання перевірки кандидатів ДГ. Це буде використано для пропускання рядків у файлі вхідних даних, які вже було оброблено, якщо завдання буде перезапущено.

start=шістнадцяткове-значення
    Вказати початкову точку (у форматі шістнадцяткового числа) при породженні модулів кандидатів для DH-GEX.

generator=значення
    Вказати бажаний породжувач (у форматі десяткового числа) при перевірці модулів кандидатів для DH-GEX.

СЕРТИФІКАТИ
У ssh-keygen передбачено підтримку підписування ключів для отримання сертифікатів, якими можна скористатися для розпізнавання користувача або вузла зв'язку. Сертифікати складаються з відкритого ключа, деяких даних профілю, нуля або більшої кількості назв реєстраційних записів (користувача або вузла зв'язку) і набору параметрів, які підписано ключем служби сертифікації (Certification Authority або CA). Клієнти або сервери можуть довіряти лише ключу CA і перевіряти його підпис і сертифікат, а не встановлювати довіру до багатьох ключів користувачів або вузлів зв'язку. Зауважте, що сертифікати OpenSSH мають інший, і набагато простіший, формат за сертифікати X.509, які використано у ssl(8).

У ssh-keygen передбачено підтримку двох типів сертифікатів: сертифікатів користувача і вузла. За сертифікатами користувачів відбувається розпізнавання користувачів на серверах, а сертифікати вузлів використовують для розпізнавання серверних вузлів на боці користувача. Для створення сертифіката користувача скористайтеся такою командою:

    $ ssh-keygen -s /шлях/до/ключ_ca -I ідентифікатор -n користувач \
          /шлях/до/ключ_користувача.pub

Сертифікат-результат буде розміщено у /шлях/до/ключ_користувача-cert.pub. Аргументом -I є ідентифікатор ключа, який використовуватиметься в журналах, і яким можна буде скористатися для відкликання ключів. Аргументом -n є один або декілька (розділених комами) принципалів, зазвичай імен користувачів, яких представляє сертифікат. Для сертифіката вузла слід використовувати параметр -h:

    $ ssh-keygen -s /шлях/до/ключа_ca -I ідентифікатор -h -n foo.example.org \
          /шлях/до/ключ_вузла.pub

Для сертифікатів вузлів реєстраційні дані, які зазначаються за допомогою аргументу -n, є назвами вузлів і можуть містити символи-замінники.

Сертифікат вузла буде виведено до файла /шлях/до/ключа_вузла-cert.pub.

Підписування можна виконати за допомогою ключа CA, який зберігається у жетоні PKCS#11, вказавши бібліотеку жетонів за допомогою параметра -D і визначивши ключ CA шляхом надання його відкритої частини як аргументу параметра -s:

    $ ssh-keygen -s ключ_ca.pub -D libpkcs11.so -I ідентифікатор -n користувач \
          ключ_користувача.pub

Так само, можна задати ключ CA для зберігання у ssh-agent(1). Вказати про це можна за допомогою прапорця -U і, знову ж таки, ключ CA має бути вказано за його відкритою частиною.

    $ ssh-keygen -Us ключ_ca.pub -I ідентифікатор -n користувач ключ_користувача.pub

В усіх випадках ідентифікатор_ключа є «ідентифікатором ключа», який записується до журналу сервером, коли сертифікат використовують для розпізнавання.

Чинність сертифікатів обмежено набором назв реєстраційних записів (користувача або вузла). Щоб створити сертифікат для вказаного набору реєстраційних даних, скористайтеся такими командами:

    $ ssh-keygen -s ключ_ca -I ідентифікатор -n користувач1,користувач2 ключ_користувача.pub
    $ ssh-keygen -s ключ_ca -I ідентифікатор -h -n вузол.домен ключ_вузла.pub

Додаткові обмеження щодо чинності і використання сертифікатів користувача можна вказати за допомогою параметрів сертифіката. Параметр сертифіката може вимкнути можливості сеансу SSH, обмежити чинність певними адресами джерела або обмежити використання сертифіката певною командою.

Коректні параметри для сертифікатів користувача:

clear
    Зняти усі увімкнені права доступу. Корисно для вилучення типового набору прав доступу, щоб мати змогу вказати права доступу окремо.

critical:назва[=вміст]
extension:назва[=вміст]
    Дає змогу включити довільний критичний параметр або розширення сертифіката. Вказана назва має включати суфікс домену. Приклад: “name@example.com”. Якщо вказано вміст, його буде включено як вміст розширення/параметра, закодованого як рядок. Якщо вміст вказано не буде, розширення/параметр буде створено без вмісту (зазвичай, це вказує на прапорець). Розширення може бути проігноровано клієнтом або сервером, який їх не розпізнає, оскільки невідомі критичні параметри спричинятимуть відмову у прийнятті сертифіката.

force-command=команда
    Наказує програмі при використанні сертифіката для розпізнавання виконати замість будь-якої оболонки чи команди команду, яку вказано користувачем.

no-agent-forwarding
    Вимкнути переспрямовування ssh-agent(1) (типово, його дозволено).

no-port-forwarding
    Вимкнути переспрямування портів (типово, його дозволено).

no-pty
    Вимкнути надання PTY (типово, його дозволено).

no-user-rc
    Вимкнути виконання ~/.ssh/rc у sshd(8) (типово, його дозволено).

no-x11-forwarding
    Вимкнути переспрямування X11 (типово, його дозволено).

permit-agent-forwarding
    Дозволяє переспрямовування ssh-agent(1).

permit-port-forwarding
    Дозволяє переспрямовування портів.

permit-pty
    Дозволяє надання PTY.

permit-user-rc
    Дозволяє виконання ~/.ssh/rc у sshd(8).

permit-X11-forwarding
    Дозволяє переспрямовування X11.

no-touch-required
    Не вимагати від підписів, створених за допомогою цього ключа, включати демонстрацію присутності користувача (наприклад дотику користувача до засобу розпізнавання). Цей параметр має сенс лише для алгоритмів розпізнавання FIDO ecdsa-sk та ed25519-sk.

source-address=список_адрес
    Обмежити адреси джерела, звідки сертифікат вважатиметься чинним. Значенням аргументу список_адрес має бути список відокремлених комами пар адреса/маска мережі у форматі CIDR.

verify-required
    Вимагати від, створених за допомогою цього ключа, показувати, що користувача було спочатку перевірено, наприклад, за допомогою PIN-коду або біометричних даних на жетоні. Цей параметр має сенс лише для алгоритмів розпізнавання FIDO ecdsa-sk та ed25519-sk.

У поточній версії немає стандартних параметрів, які є чинними для ключів вузлів.

Нарешті, сертифікати може бути визначено із строком дії. За допомогою параметра -V можна вказати початок і кінець строку дії сертифіката. Сертифікат, який буде надано поза вказаним часовим проміжком, не вважатиметься чинним. Типово, сертифікати є чинними від початку епохи UNIX до далекого майбутнього.

Для сертифікатів, які буде використано для розпізнавання користувача або вузла, відкритий ключ служби сертифікації (CA) має бути довіреним для sshd(8) або ssh(1). Зверніться до відповідних сторінок підручника, щоб дізнатися більше.

ЗАСІБ РОЗПІЗНАВАННЯ FIDO
ssh-keygen може створювати ключі на основі засобу ідентифікації FIDO, після чого ключами можна буде скористатися подібно до інших типів ключів, підтримку яких передбачено в OpenSSH, доки апаратний засіб розпізнавання з'єднано при використання ключів. Засоби розпізнавання FIDO, загалом, потребують від користувача явних уповноважень дій торканням або притисканням пальця. Ключі FIDO складаються з двох частин: дескриптора ключа, який зберігається у файлі закритого ключа на диску, і закритого ключа пристрою, який є унікальним для кожного засобу розпізнавання FIDO і який не можна експортувати з апаратної частини засобу розпізнавання. Ці частини поєднуються обладнанням у момент розпізнавання для створення справжнього ключа, який буде використано для викликів розпізнавання. Підтримуваними типами ключів є ecdsa-sk і ed25519-sk.

Параметри, якими можна скористатися для ключів FIDO, є такими:

application
    Перевизначити типовий рядок застосування/походження FIDO “ssh:”. Це може бути корисним при створенні резидентних ключів для вузлів або доменів. Вказаний рядок застосування має починатися з “ssh:”.

challenge=шлях
    Вказує шлях до рядка виклику, який буде передано засобу розпізнавання FIDO під час створення ключа. Рядком виклику можна скористатися як частиною позасмугового протоколу для реєстрації ключів (типово, буде використано випадковий виклик).

device
    Явно задати пристрій fido(4) для використання, замість того, щоб дозволити це робити проміжним програмним засобам розпізнавання.

no-touch-required
    Вказати, що генерований закритий ключ не має вимагати подій доторку (присутність користувача) коли створюємо підписи. Зауважте, що sshd(8) типово відмовляє таким підписам, якщо не вказано інакше через параметр authorized_keys.

resident
    Вказує, що ключ має бути збережено у самому засобі розпізнавання FIDO. Це спростить використання засобу розпізнавання на декількох комп'ютерах. Підтримку резидентних ключів може бути реалізовано у засобах розпізнавання FIDO2. Типово, для них потрібно встановити PIN на засобі розпізнавання до створення ключа. Резидентні ключі може бути завантажено без засобу розпізнавання за допомогою ssh-add(1). Зберігання обох частин ключа у засобі розпізнавання FIDO збільшує ймовірність того, що зловмисник зможе скористатися викраденим пристроєм для розпізнавання.

user
    Ім'я користувача, яке слід пов'язати із резидентним ключем, перевизначивши типове порожнє ім'я користувача. Визначення імені користувача може бути корисним при створенні декількох резидентних ключів для однакового застосування.

verify-required
    Вказати, що цей закритий ключ має потребувати перевірки користувачем для кожного підписування. Підтримку цього параметра передбачено не для усіх засобів розпізнавання FIDO. У поточній версії єдиним підтримуваним способом розпізнавання є PIN-код. Втім, у майбутньому може бути реалізовано інші способи.

write-attestation=шлях
    Може бути використано у момент створення ключа для запису даних атестації, які повернуто із засобів розпізнавання FIDO під час створення ключа. Ці відомості потенційно є конфіденційними. Типово, ці дані буде відкинуто.

СПИСКИ ВІДКЛИКАННЯ КЛЮЧІВ
ssh-keygen може керувати списками відкликання ключів (Key Revocation Lists або KRL) у форматі OpenSSH. У цих двійкових файлах у компактному форматі визначено ключі або сертифікати, які слід відкликати: достатньо одного біта на сертифікат, якщо сертифікати відкликано за серійним номером.

KRL може бути створено за допомогою прапорця -k. Програма прочитає один або декілька файлів з рядка команди і створить новий KRL. Файли можуть містити або задані дані KRL (див. нижче), або відкриті ключі у списку по одному на рядок. Щоб відкликати звичайні текстові відкриті ключі, слід вказати список їхніх хеш-сум або дані у KRL, а щоб відкликати сертифікат, слід вказати серійний номер або ідентифікатор ключа (якщо серійний номер є нульовим або серійний номер не вказано).

Відкликання ключів за допомогою зазначення KRL надає вам явний контроль над типами записів, які використовують для відкликання ключів. Ним можна скористатися для безпосереднього відкликання ключів за серійним номером або ідентифікатором ключа без потреби у наявності усього початкового сертифіката. Задані дані KRL складаються з рядків, що містяться одну з наведених нижче інструкцій, після якого слід вказати двокрапку і певну специфічну інформацію.

serial: серійний_номер[-серійний_номер]
    Відкликає сертифікат із вказаним серійним номером. Серійні номери є 64-бітовими значеннями, окрім нуля, і можуть бути вказані у десятковій, шістнадцятковій або вісімковій формі запису. Якщо між двома серійними номерами розміщено дефіс, буде відкликано усі сертифікати із серійними номерами у відповідному діапазоні, включно із кінцями. Ключ CA має бути вказано у рядку команди ssh-keygen за допомогою параметра -s.

id: ідентифікатор_ключа
    Відкликає сертифікат із вказаним рядком ідентифікатора ключа. У рядку команди ssh-keygen слід вказати ключ служби сертифікації (CA) за допомогою параметра -s.

key: відкритий_ключ
    Відкликає вказаний ключ. Якщо вказано сертифікат, його буде відкликано як звичайний відкритий ключ.

sha1: відкритий_ключ
    Відкликає вказаний ключ, включивши його хеш-суму SHA1 до KRL.

sha256: відкритий_ключ
    Відкликає вказаний ключ, включивши його хеш-суму SHA256 до KRL. У версіях OpenSSH до 7.9 не передбачено підтримки KRL, які відкликають ключів за хешем SHA256.

hash: відбиток
    Відкликає ключ з використанням хеш-суми відбитка, яку може бути визначено з повідомлення журналу розпізнавання sshd(8) або прапорця ssh-keygen -l. Передбачено підтримку лише відбитків SHA256, а підтримку отриманих KRL передбачено лише у версіях OpenSSH, починаючи з 7.9.

KRL можна оновлювати за допомогою прапорця -u, окрім прапорця -k. Якщо вказано цей параметр, ключі зі списку у рядку команди буде об'єднано із KRL: програма додасть до списку ті ключі, яких там ще не було.

Також можна, якщо задано KRL, перевірити чи він відкликає якийсь ключ (або ключі). Прапорець -Q опитує наявний KRL, перевіряючи кожен ключ, що вказано в командному рядку. Якщо будь-який ключ, вказаний у командному рядку, було відкликано (або сталася помилка), тоді ssh-keygen завершить роботу із ненульовим станом. Нульовий стан виходу буде повернено, лише якщо жоден ключ не було відкликано.

ДОЗВОЛЕНІ ПІДПИСАНТИ
При перевірці підписів ssh-keygen використовує простий список профілів і ключів для визначення, чи походить підпис із уповноваженого джерела. У цьому файлі «дозволених підписантів» використано формат, взірцем для якого є ФОРМАТ ФАЙЛІВ УПОВНОВАЖЕНИХ КЛЮЧІВ, який описано на сторінці підручника sshd(8). У кожному рядку цього файла містяться такі відокремлені пробілами поля: реєстраційні записи, параметри, тип ключа, ключ у кодуванні base64. Порожні рядки та рядки, що починаються з символу ‘#’, буде проігноровано — вони вважатимуться частиною коментарів.

Поле реєстраційних записів є списком взірців (див. «ВЗІРЦІ» у підручнику з ssh_config(5)), що складається із одного або декількох відокремлених комами взірців профілів КОРИСТУВАЧ@ДОМЕН, які приймаються для підписування. При перевірці профіль, який вказано за допомогою параметра -I, має відповідати взірцю реєстраційних даних, щоб відповідний ключ вважався прийнятним для перевірки.

Параметри (якщо вказано) складаються з відокремлених комами записів окремих параметрів. Пробіли використовувати не можна, окрім пробілів у подвійних лапках. Передбачено підтримку таких специфікацій параметрів (зауважте, що ключові слова параметрів можна вказувати без врахування регістру символів):

cert-authority
    Вказує, що цей ключ є прийнятним як ключ служби сертифікації (CA), і що сертифікати, які підписано цією CA, має бути прийнято для перевірки.

namespaces=список-просторів-назв
    Задає список взірців просторів назв, які є прийнятними для цього ключа. Якщо вказано цей параметр, простір назв підпису, який вбудовано до об'єкта підпису і представлено у рядку команди для перевірки, має відповідати вказаному списку, перш ніж ключ вважатиметься прийнятним.

valid-after=часова-позначка
    Вказує, що ключ є чинним до використання від вказаної часової позначки, якою може бути дата або час у форматі РРРРММДД[Z] або РРРРММДДГГХХ[СС][Z]. Записи дати і часу буде оброблено у поточному часовому поясі системи, якщо не вказано суфікса Z, і у часовому поясі всесвітнього часу, якщо суфікс вказано.

valid-before=часова-позначка
    Вказує, що ключем можна користуватися не пізніше вказаної часової позначки.

При перевірці підписів, створених за допомогою сертифікатів, очікувана назва реєстраційного запису має відповідати одразу взірцю реєстраційних записів у файлі дозволених підписантів і реєстраційним записам, які вбудовано до самого сертифіката.

Приклад коректного файла підписантів:

    # На початку рядка можна вказувати коментарі
    user1@example.com,user2@example.com ssh-rsa AAAAX1...
    # Служба сертифікації, якій довіряють для усіх реєстраційних записів у домені.
    *@example.com cert-authority ssh-ed25519 AAAB4...
    # Ключ, який приймають лише для підписування файлів.
    user2@example.com namespaces="file" ssh-ed25519 AAA41...

СЕРЕДОВИЩЕ

SSH_SK_PROVIDER
    Задає шлях до бібліотеки, яку буде використано при завантаженні будь-яких ключів FIDO на боці засобу розпізнавання. Перевизначає типове використання вбудованої підтримки HID USB.

ФАЙЛИ
~/.ssh/id_ecdsa
~/.ssh/id_ecdsa_sk
~/.ssh/id_ed25519
~/.ssh/id_ed25519_sk
~/.ssh/id_rsa
    Містить профіль розпізнавання користувача у форматах ECDSA, вбудованого у засіб розпізнавання ECDSA, Ed25519, вбудованого у засіб розпізнавання Ed25519 або RSA. Цей файл має бути придатним для читання лише для відповідного користувача. Під час створення ключа можна вказати пароль; цей пароль буде використано для шифрування закритої частини цього файла на основі 128-бітового алгоритму AES. Доступ до цього файла з боку ssh-keygen не здійснюватиметься автоматично, але його буде запропоновано як типовий файл для закритого ключа. ssh(1) читатиме дані з цього файла під час спроби увійти до системи.

~/.ssh/id_ecdsa.pub
~/.ssh/id_ecdsa_sk.pub
~/.ssh/id_ed25519.pub
~/.ssh/id_ed25519_sk.pub
~/.ssh/id_rsa.pub
    Містить відкритий ключ для розпізнавання у форматі ECDSA, вбудованого у засіб розпізнавання ECDSA, Ed25519, вбудованого у засіб розпізнавання Ed25519 або RSA. Вміст цього файла має бути додано до ~/.ssh/authorized_keys на усіх машинах, де користувач хоче входити до системи з використанням розпізнавання за відкритим ключем. Потреби в обмеженні доступ до вмісту цього файла немає.

/etc/ssh/moduli
    Містить групи Діффі-Гелмана, які використовують для DH-GEX. Формат файла описано на сторінці підручника moduli(5).

ДИВ. ТАКОЖ
ssh(1), ssh-add(1), ssh-agent(1), moduli(5), sshd(8) RFC 4716, The Secure Shell (SSH) Public Key File Format, 2006.

АВТОРИ
OpenSSH походить від початкового і вільного випуску ssh 1.2.12, автором якого є Tatu Ylonen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt і Dug Song усунули багато вад, додали нові можливості та створили OpenSSH. Markus Friedl зробив внесок у підтримку версій протоколу SSH 1.5 і 2.0.

ПЕРЕКЛАД
Український переклад цієї сторінки посібника виконано Andrij Mizyk <andmizyk@gmail.com>, Andriy Rysin <arysin@gmail.com> і Yuri Chornoivan <yurchor@ukr.net>

Цей переклад є безкоштовною документацією; будь ласка, ознайомтеся з умовами GNU General Public License Version 3: https://www.gnu.org/licenses/gpl-3.0.html. НЕ НАДАЄТЬСЯ ЖОДНИХ ГАРАНТІЙ.

Якщо ви знайшли помилки у перекладі цієї сторінки підручника, будь ласка, надішліть електронний лист до списку листування перекладачів: trans-uk@lists.fedoraproject.org.