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, але пароль у нас більше не питатиметься.
dsa
ecdsa
ed25519
rsa
Щоб вибрати будь-який із цих типів, використовується опція -t. У попередньому прикладі ми вибрали rsa – явно вказувати тип RSA необов’язково, оскільки він мається на увазі за умовчанням (тобто генерацію ключів можна запустити без опції -t).
~/.ssh/id_dsa
~/.ssh/id_ecdsa
~/.ssh/id_ed25519
~/.ssh/id_rsa
Ці файли потрібно тримати в секреті, вони мають бути доступні лише для власника.
~/.ssh/id_dsa.pub
~/.ssh/id_ecdsa.pub
~/.ssh/id_ed25519.pub
~/.ssh/id_rsa.pub
Ці файли не є секретними, їх вміст потрібно скопіювати у файл ~/.ssh/authorized_keys на комп’ютер із сервером SSH.
Ми застосували ssh-keygen для створення ключів. Крім цього вона призначена для керування та конвертації ключів аутентифікації для ssh. Далі розглянуті лише деякі функції цієї програми, з повним переліком опцій можна ознайомитись командою:
Для цього використовується опція: -b Вона визначає кількість біт у створюваному ключі. Для ключів RSA мінімальний розмір становить 1024 біти, а за замовчуванням – 2048 біт. Як правило, 2048 біт вважається достатнім. Ключі DSA повинні мати довжину 1024 біта, як зазначено у FIPS 186-2. Для ключів ECDSA прапор -b визначає довжину ключа, вибираючи один із трьох розмірів еліптичної кривої: 256, 384 або 521 біт. Спроба використовувати бітові довжини, відмінні від цих трьох значень, для ключів ECDSA зазнає невдачі. Ключі Ed25519 мають фіксовану довжину і прапор -b ігноруватиметься.
1. -C коментар – Після цієї опції вкажіть коментар.
2. -c – Ця опція включає процес змін коментаря у файлах приватного та публічного ключів. Програма зробить запит на файл, що містить приватні ключі, пароль (якщо він встановлений), а потім запропонує ввести новий коментар.
Побачити коментар можна за допомогою опції -l. Ця опція показує відбиток вказаного файлу публічного ключа. Для RSA та DSA ключів ssh-keygen намагається знайти співпадаючий файл публічного ключа та вивести його відбиток.
Якщо поєднати з -v, то візуальне художнє уявлення ASCII буде показано після відбитка:
Файл ключа можна вказати опцією -f:
Файл ключів необхідно вказати опцією -f:
Опція -y прочитає файл OpenSSH формату із приватним ключем та надрукує у стандартний висновок публічний ключ OpenSSH.
Також за допомогою опції -f потрібно вказати шлях до приватного ключа, з якого буде вилучено відповідний публічний ключ:
Наприклад, приватний ключ поміщений файл id_rsa, тоді команда вилучення з нього публічного ключа наступна:
Ви можете зіткнутися з помилкою:
Вона означає, що приватний ключ доступний для читання будь-кому і програма ssh-keygen відмовляється працювати з ним з цієї причини. Щоб виправити цю помилку, просто встановіть файл із приватним ключем права доступу 600:
Одну і ту ж пару ключів можна використовувати для доступу до багатьох серверів SSH. Отже, на кожному з них (на клієнті та на серверах) може бути один ключ. Проте якщо у вас кілька ключів або якщо ви хочете використовувати інше, не стандартне розташування файлів ключів, далі показано, як вказати розташування в рядку команди і в конфігураційних файлах клієнта SSH. У конфігураційному файлі SSH для вказівки шляху до приватних ключів використовується директива IdentityFile.
Її значення за замовчуванням:
Як можна побачити, можна використовувати тильду для вказівки на домашню папку користувача. Можна мати кілька директив IdentityFile у конфігураційних файлах; всі ці ідентифікатори будуть випробувані по черзі. Численні директиви IdentityFile додадуть кандидатів у чергу для спроб (ця поведінка відрізняється від інших конфігураційних директив). Також можна налаштувати використання певних ідентифікаційних файлів для певних хостів:
Для рядка команди використовується опція -i, після якої потрібно вказати шлях до приватного ключа (файл ідентифікації). Значення за умовчанням такі самі, як і в розглянутої вище директиви. Опцію i можна використовувати кілька разів.
Публічні ключі всіх видів розміщені в одному файлі, значення за промовчанням:
~/.ssh/authorized_keys
~/.ssh/authorized_keys2
Кожен рядок файлу містить один ключ (порожні рядки і рядки, що починаються з ‘#’ ігноруються як коментарі). Публічні ключі складаються з наступних розділених пробілами полів: опції, тип ключа, ключ у кодуванні base64, коментар. Поле з опціями є необов’язковим. Тип ключа це “ecdsa-sha2-nistp256”, “ecdsa-sha2-nistp384″, “ecdsa-sha2-nistp521″, “ssh-ed25519”, “ssh-dss” або “ssh-rsa”. Поле коментаря ні для чого не використовується (але може бути зручним для користувача ідентифікувати ключ).
Для конвертації формату .ppk у OpenSSH можна використовувати утиліту puttygen, яка включена в пакет Putty. Отже, нам потрібно встановити PuTTY Linux: з вашим менеджером пакетів встановіть PuTTY (або мінімальний пакет PuTTY-tools):
OS X: Встановіть Homebrew, а потім запустіть
Помістіть ваші ключі в якусь директорію, наприклад, у домашню папку. Тепер конвертуємо ключі PPK в SSH пару.
Перемістіть ці ключі в ~/.ssh і переконайтеся, що для приватного ключа обмежені права запису:
Відкрийте PuTTYgen, натисніть кнопку Load і виберіть файл .ppk з ключами. Ви відразу побачите публічний ключ SSH, який ви можете скопіювати та вставити у файл. Тепер у меню перейдіть до «Conversions» → «Export OpenSSH key» та збережіть приватний ключ. Скопіюйте ваш приватний ключ у файл ~/.ssh/id_dsa (або id_rsa).