SSH (ч.4): Створення та налаштування ключів OpenSSH

4 квітня 2023 1 хвилина Автор: Endpool

Вхід у SSH без пароля (з використанням файлів ключів)

SSH-ключі – пара захищених шифруванням ключів (приватний та публічний), які використовуються для авторизації при підключенні до сервера за протоколом SSH. Ми рекомендуємо використовувати SSH-ключі замість пароля для підвищення надійності та безпеки підключення. Для генерації пари ключів використовується програма ssh-keygen, вона включена в пакет ssh і якщо SSH у вас вже налаштований, додатково встановлювати нічого не потрібно. Стандартні ключі SSH зберігаються в каталозі ~/. ssh. Якщо у вас немає каталогу ~/. ssh, створіть його з правильними дозволами за допомогою команди ssh-keygen. Вхід до SSH за публічним ключем (без пароля) дуже зручний та безпечний. Процес налаштування автентифікації за публічним ключем дуже простий: Командою створюється пара “публічний ключ – приватний ключ”.

Публічний ключ копіюється на комп’ютер із сервером SSH, тобто на комп’ютер, до якого буде здійснюватись підключення і на якому будуть виконуватися команди. А потім вже підключення виконується звичайним способом, але введення пароля не потрібно. Публічний ключ, який копіюється на віддалений сервер, не є таємним. Один і той же ключ можна використовувати на різних серверах. Головне – зберігати в секреті приватний ключ. Згененувати ключі та скопіювати їх на віддалений хост можна буквально трьома командами. Щоб прискорити процес входу та оптимізувати поведінку клієнта SSH, можна створити та налаштувати файл конфігурації SSH ~/.ssh/config. У програмі ssh-keygen багато функцій та можливостей, почнемо з розгляду процедури генерації ключів, яка виконується елементарно. Якщо ви встигли залогінитись на віддаленій системі, розлогіться.

Після цього наберіть:

У нас запитують ім’я файлу, не потрібно нічого вводити, буде використано стандартне ім’я. Також запитується пароль. Цей пароль дозволяє встановити додатковий захист – при підключенні за допомогою ключів не запитуватиметься пароль користувача, але запитуватиметься пароль самого ключа. Не потрібно встановлювати пароль.

Приклад входу

В результаті буде створено два файли:

  • ~/.ssh/id_rsa

  • ~/.ssh/id_rsa.pub

Перший файл потрібно зберігати у секреті. Другий файл потрібно скопіювати на віддалений комп’ютер, де запущено сервер SSH. Тепер на дистанційній машині нам потрібно створити каталог .ssh.

Запустіть команду виду:

Наприклад:

Тепер нам потрібно скопіювати вміст файлу id_rsa.pub на віддалену машину у ~/.ssh/authorized_keys файл.  Це дуже просто (треба поміняти дані на свої):

Наприклад:

Тепер виконуємо підключення за допомогою клієнта SSH, але пароль у нас більше не питатиметься.

Типи ключів

Програма ssh-keygen може генерувати чотири типи ключів:

  • dsa

  • ecdsa

  • ed25519

  • rsa

Щоб вибрати будь-який із цих типів, використовується опція -t. У попередньому прикладі ми вибрали rsa – явно вказувати тип RSA необов’язково, оскільки він мається на увазі за умовчанням (тобто генерацію ключів можна запустити без опції -t).

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

  • ~/.ssh/id_dsa

  • ~/.ssh/id_ecdsa

  • ~/.ssh/id_ed25519

  • ~/.ssh/id_rsa

Ці файли потрібно тримати в секреті, вони мають бути доступні лише для власника.

Відповідні публічні ключі матимуть таку саму назву, але з додатковим розширенням .pub:

  • ~/.ssh/id_dsa.pub

  • ~/.ssh/id_ecdsa.pub

  • ~/.ssh/id_ed25519.pub

  • ~/.ssh/id_rsa.pub

Ці файли не є секретними, їх вміст потрібно скопіювати у файл ~/.ssh/authorized_keys на комп’ютер із сервером SSH.

Утиліта ssh-keygen

Ми застосували ssh-keygen для створення ключів. Крім цього вона призначена для керування та конвертації ключів аутентифікації для ssh. Далі розглянуті лише деякі функції цієї програми, з повним переліком опцій можна ознайомитись командою:

Як змінити кількість бітів у ключах ssh-keygen?

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

Додавання коментарів до ключів ssh-keygen

Для роботи з коментарями є дві опції:

1. -C коментар – Після цієї опції вкажіть коментар.

2. -c – Ця опція включає процес змін коментаря у файлах приватного та публічного ключів. Програма зробить запит на файл, що містить приватні ключі, пароль (якщо він встановлений), а потім запропонує ввести новий коментар.

Побачити коментар можна за допомогою опції -l. Ця опція показує відбиток вказаного файлу публічного ключа. Для RSA та DSA ключів ssh-keygen намагається знайти співпадаючий файл публічного ключа та вивести його відбиток.

Якщо поєднати з -v, то візуальне художнє уявлення ASCII буде показано після відбитка:

Файл ключа можна вказати опцією -f:

Зміна паролів у ssh-keygen

Для роботи з паролями є кілька опцій:

  • -P парольна фраза – Цією опцією можна передати пароль, щоб програма не запитувала. При зміні пароля цією опцією передається старий пароль.
  • -p – Ця опція замість створення нового ключа запускає зміну парольної фрази файлу приватного ключа. Програма зробить запит, де розміщено файл приватного ключа, потім запитає старий пароль та попросить двічі ввести нову парольну фразу.
  • -N новий_пароль – Цією опцією можна передати новий пароль, щоб програма його не питала. Під час створення ключів можна використовувати цю опцію для вказівки паролів, щоб програма не питала їх в інтерактивному режимі.

Файл ключів необхідно вказати опцією -f:

Показ публічного ключа з приватного

Опція -y прочитає файл OpenSSH формату із приватним ключем та надрукує у стандартний висновок публічний ключ OpenSSH.

Також за допомогою опції -f потрібно вказати шлях до приватного ключа, з якого буде вилучено відповідний публічний ключ:

Наприклад, приватний ключ поміщений файл id_rsa, тоді команда вилучення з нього публічного ключа наступна:

Ви можете зіткнутися з помилкою:

Вона означає, що приватний ключ доступний для читання будь-кому і програма ssh-keygen відмовляється працювати з ним з цієї причини. Щоб виправити цю помилку, просто встановіть файл із приватним ключем права доступу 600:

Управління приватними ключами на клієнті SSH

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

Її значення за замовчуванням:

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

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

Управління публічними ключами на сервері SSH

Публічні ключі всіх видів розміщені в одному файлі, значення за промовчанням:

За замовчуванням перевіряються файли:

  • ~/.ssh/authorized_keys

  • ~/.ssh/authorized_keys2

Кожен рядок файлу містить один ключ (порожні рядки і рядки, що починаються з ‘#’ ігноруються як коментарі). Публічні ключі складаються з наступних розділених пробілами полів: опції, тип ключа, ключ у кодуванні base64, коментар. Поле з опціями є необов’язковим. Тип ключа це “ecdsa-sha2-nistp256”,ecdsa-sha2-nistp384″,ecdsa-sha2-nistp521″, “ssh-ed25519”, “ssh-dss” або “ssh-rsa”. Поле коментаря ні для чого не використовується (але може бути зручним для користувача ідентифікувати ключ).

Як конвертувати .ppk ключ у OpenSSH ключ?

Конвертація ключів з файлу .ppk у формат OpenSSH на Linux

Для конвертації формату .ppk у OpenSSH можна використовувати утиліту puttygen, яка включена в пакет Putty. Отже, нам потрібно встановити PuTTY Linux: з вашим менеджером пакетів встановіть PuTTY (або мінімальний пакет PuTTY-tools):

Debian, Kali Linux, Linux Mint, Ubuntu та їх похідні:

Arch Linux, BlackArch та їх похідні:

Gentoo:

Дистрибутиви на основі RPM:

OS X: Встановіть Homebrew, а потім запустіть

Помістіть ваші ключі в якусь директорію, наприклад, у домашню папку. Тепер конвертуємо ключі PPK в SSH пару.

Для отримання приватного ключа:

Для отримання публічного ключа:

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

Конвертация ключей из файла .ppk в формат OpenSSH в Windows

Відкрийте PuTTYgen, натисніть кнопку Load і виберіть файл .ppk з ключами. Ви відразу побачите публічний ключ SSH, який ви можете скопіювати та вставити у файл. Тепер у меню перейдіть до «Conversions» → «Export OpenSSH key» та збережіть приватний ключ. Скопіюйте ваш приватний ключ у файл ~/.ssh/id_dsa (або id_rsa).

Інтерфейс PuTTY
Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.