SSH - створення та використання ключів у системі Ubuntu

2024-02-12 20:09
115
Ця стаття на мовах: UA / RU

Стаття у розділах:

Термінал Сервера

Зміст

Вступ

SSH, або Secure Shell, - це зашифрований протокол, який використовується для адміністрування та зв'язку з серверами. Працюючи з сервером Ubuntu, ви, ймовірно, проводите більшу частину свого часу в термінальному сеансі, підключеному до вашого сервера через SSH.

У цьому посібнику ми зосередимося на налаштуванні ключів SSH для Ubuntu. Ключі SSH забезпечують безпечний спосіб входу на ваш сервер і рекомендовані для всіх користувачів.

Крок 1 — Створення пари ключів

Першим кроком є створення пари ключів на клієнтській машині (зазвичай, це ваш комп'ютер):

ssh-keygen

За замовчуванням, останні версії ssh-keygen створять 3072-бітну пару ключів RSA, яка є достатньо безпечною для більшості випадків використання (можна передати прапорець -b 4096, щоб створити більший 4096-бітний ключ).

Після введення команди ви повинні побачити такий результат:

Output
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

Натисніть Enter, щоб зберегти пару ключів у підкаталозі .ssh вашого домашнього каталогу, або вкажіть альтернативний шлях.

Якщо ви раніше створили пару ключів SSH, ви можете побачити таке повідомлення:

Output
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

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

Після цього ви повинні побачити таке повідомлення:

Output
Enter passphrase (empty for no passphrase):

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

Потім ви повинні побачити результат, подібний до такого:

Output
Your identification has been saved in /your_home/.ssh/id_rsa
Your public key has been saved in /your_home/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks user@host
The key's randomart image is:
+---[RSA 3072]----+
|                .|
|               + |
|              +  |
| .           o . |
|o       S   . o  |
| + o. .oo. ..  .o|
|o = oooooEo+ ...o|
|.. o *o+=.*+o....|
|    =+=ooB=o.... |
+----[SHA256]-----+

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

Крок 2 — Копіювання відкритого ключа на ваш сервер Ubuntu

Найшвидший спосіб скопіювати ваш відкритий ключ на сервер Ubuntu - скористатися утилітою з назвою ssh-copy-id. Завдяки своїй простоті цей метод настійно рекомендується, якщо він доступний. Якщо на вашій клієнтській машині немає доступу до ssh-copy-id, ви можете скористатися одним із двох альтернативних методів, наведених у цьому розділі (копіювання через SSH на основі пароля або копіювання ключа вручну).

Копіювання відкритого ключа за допомогою ssh-copy-id

Інструмент ssh-copy-id включений за замовчуванням у багато операційних систем, тому він може бути доступний у вашій локальній системі. Щоб цей метод працював, ви вже повинні мати доступ до свого сервера через SSH на основі пароля.

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

Синтаксис:

ssh-copy-id username@remote_host

Ви можете побачити таке повідомлення:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Це означає, що ваш локальний комп'ютер не розпізнає віддалений хост. Це станеться під час першого підключення до нового хосту. Введіть "yes" і натисніть ENTER, щоб продовжити.

Далі утиліта просканує ваш локальний обліковий запис на наявність ключа id_rsa.pub, який ми створили раніше. Коли вона знайде ключ, вона запросить вас ввести пароль облікового запису віддаленого користувача:

Output
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:

Введіть пароль (введені дані не будуть відображатися з міркувань безпеки) і натисніть ENTER. Утиліта підключиться до облікового запису на віддаленому хості за допомогою введеного вами пароля. Потім вона скопіює вміст вашого ~/.ssh/id_rsa.pub ключа у файл у домашньому ~/.ssh каталозі віддаленого облікового запису під назвою authorized_keys.

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

Output
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

На цьому етапі ваш id_rsa.pub ключ завантажено у віддалений обліковий запис. Ви можете перейти до кроку 3.

Копіювання відкритого ключа за допомогою SSH

Якщо у вас немає доступу до команди ssh-copy-id для копіювання ключів на сервер через SSH, але ви маєте парольний доступ, ви можете скопіювати свій відкритий ключ за допомогою стандартного методу SSH.

Ми можемо використати команду cat для читання вмісту публічного ключа SSH на нашому локальному комп'ютері та передати його через SSH-з'єднання до віддаленого сервера.

Спочатку переконайтеся, що каталог ~/.ssh існує та має відповідні дозволи під вашим обліковим записом.

Потім ми можемо вивести вміст публічного ключа, передати його через SSH до віддаленого сервера та додати його до файлу authorized_keys. Використаємо символ перенаправлення >> для додавання вмісту в кінець файлу, щоб не перезаписувати його. Це дозволить нам додавати ключі без втрати раніше доданих.

Ось повна команда:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Під час виконання цієї команди ви, можливо, побачите повідомлення про підтвердження автентичності хоста. 

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Введіть "yes" і натисніть ENTER, щоб продовжити.

Після цього вас буде запрошено ввести пароль віддаленого користувача.

Output
[email protected]'s password:

Після введення пароля вміст вашого id_rsa.pub ключа буде скопійовано в кінець файлу authorized_keys на віддаленому сервері. Якщо операція успішна, перейдіть до кроку 3.

Копіювання відкритого ключа вручну

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

Вручну додайте вміст вашого id_rsa.pub файлу до файлу authorized_keys у каталозі ~/.ssh на вашій віддаленій машині.

Спочатку відобразіть вміст ключа id_rsa.pub, введіть на своєму локальному комп'ютері:

cat ~/.ssh/id_rsa.pub

Ви побачите вміст ключа, який має виглядати приблизно так:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Здійсніть доступ до вашого віддаленого хосту будь-яким доступним способом.

Отримавши доступ до вашого облікового запису на віддаленому сервері, переконайтеся, що каталог ~/.ssh існує. Ця команда створить каталог, якщо він не існує:

mkdir -p ~/.ssh

Тепер ви можете створити або змінити файл authorized_keys у цьому каталозі. Вставте вміст вашого id_rsa.pub файлу в кінець файлу authorized_keys, створивши його, якщо необхідно, за допомогою цієї команди:

echo public_key_string >> ~/.ssh/authorized_keys

У цій команді замініть public_key_string на результат команди cat ~/.ssh/id_rsa.pub, яку ви виконали на локальному комп'ютері. Вона повинна починатися з ssh-rsa AAAA....

Потім переконайтеся, що для каталогу ~/.ssh та файлу authorized_keys встановлені відповідні дозволи:

chmod -R go= ~/.ssh

Ця команда рекурсивно видаляє всі дозволи "групи" та "інші" для каталогу ~/.ssh/.

Якщо ви використовуєте обліковий запис root для налаштування ключів для користувача, також важливо, щоб каталог ~/.ssh належав користувачеві, а не root:

chown -R sammy:sammy ~/.ssh

У цій інструкції ім'я користувача sammy замінено на ваше відповідне ім'я користувача.

Тепер ви можете спробувати автентифікацію без пароля на вашому сервері Ubuntu.

Крок 3 — Автентифікація на сервері Ubuntu за допомогою ключів SSH

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

Основний процес той самий:

ssh username@remote_host

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

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

Це означає, що ваш локальний комп'ютер не розпізнає віддалений хост. Введіть «yes» і натисніть ENTER, щоб продовжити.

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

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

Крок 4 — Вимкнення автентифікації пароля на вашому сервері

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

  • Увійдіть на сервер за допомогою SSH або як користувач з привілеями sudo.
  • Відкрийте файл конфігурації sshd:

sudo nano /etc/ssh/sshd_config

  • Знайдіть рядок, що починається з PasswordAuthentication. Розкоментуйте цей рядок, видаливши # з початку, і встановіть значення на no:

PasswordAuthentication no

  • Збережіть зміни і закрийте файл.
  • Перезапустіть службу SSH, щоб застосувати зміни:

sudo systemctl restart ssh

  • Відкрийте нове термінальне вікно і переконайтеся, що ви можете успішно увійти на сервер за допомогою SSH, перш ніж закривати поточний сеанс:

ssh username@remote_host

Після цього переконавшись, що все працює належним чином, ви можете безпечно закрити всі поточні сеанси сервера.

Висновок

Тепер ваш сервер Ubuntu налаштований на використання SSH ключів для автентифікації, а автентифікація пароля вимкнена, що підвищує безпеку вашої системи.


Сподобалась стаття? Читайте нас в телеграм