Featured image of post Налаштування SSH авторизації на основі RSA ключа

Налаштування SSH авторизації на основі RSA ключа

Введення

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

Як це працює?

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

  • Конфігурація сервера: відкритий ключ додається до списку авторизованих ключів сервера. Це означає, що сервер розпізнає відповідний приватний ключ, коли він буде представлений під час спроб входу.

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

  • Авторизація: якщо сервер знаходить збіг, він дозволяє користувачеві увійти без необхідності вводити пароль.

Чому використання ключів безпечніше?

Авторизація на основі ключа вважається більш безпечною, ніж авторизація на основі пароля з кількох причин:

  • Стійкість до bruteforce атак: паролі можна вгадати або зламати за допомогою bruteforce. Однак за допомогою автентифікації на основі ключа зловмиснику потрібно буде володіти приватним ключем, який в ідеалі повинен надійно зберігатися та не бути легкодоступним.

  • Немає передачі паролів: під час авторизації на основі пароля пароль передається через мережу, яка потенційно може бути перехоплена зловмисниками. Завдяки авторизації на основі ключа закритий ключ ніколи не залишає клієнтську машину, тому немає ризику перехоплення.

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

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

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

Приклад з налаштування

Далі поговоримо про те, як реалізувати авторизацію на основі ключа RSA для доступу до віддаленого сервера через протокол SSH. Цей посібник припускає, що у вас є локальні та віддалені (серверні) системи Linux і ви вже маєте доступ до свого сервера через протокол ssh на основі пароля.

Генерація нового ключа

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

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

cd ~/.ssh

У моєму випадку не було каталогу .ssh, тому я створив його вручну:

mkdir ~/.ssh

Потім, щоб створити новий ключ:

ssh-keygen -t rsa -b 4096 

Параметри в команді генерації вище означають:

  • -t rsa: вказує тип ключа для створення. У цьому випадку це означає, що слід використовувати алгоритм RSA. RSA (Rivest-Shamir-Adleman) — це широко використовувана криптосистема з відкритим ключем для безпечної передачі даних.

  • b 4096: визначає кількість бітів у ключі. У цьому випадку він встановлює розмір ключа 4096 біт. Більші розміри ключів зазвичай забезпечують сильніший захист, але також можуть вимагати більше обчислювальних ресурсів для шифрування та дешифрування.

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

  1. Enter a file in which save a key (Введіть файл, в якому буде збережено ключ).

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

Приклад налаштування імені файлу ключа SSH

  1. Enter key passphraze (Введіть пароль ключа) - двічі.

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

🟢 Порада щодо безпеки: рекомендується мати різні паролі для ключа ssh і для віддаленого користувача Unix.

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

Приклад успішної генерації ключа SSH

Передача ключа на віддалений сервер

Ви можете скопіювати відкритий ключ ssh на свій сервер багатьма способами, але найбезпечнішим способом є використання SCP (захищеної копії).

🟡 Примітка: Команди scp і ssh вимагають введення пароля віддаленого користувача (user).

Щоб скопіювати відкритий ключ, використовуйте таку команду, але не забудьте замінити параметри на ваші фактичні:

scp dc1srv1.pub user@192.168.0.2:

Параметри команди scp означають:

  • dc1srv1.pub — це файл відкритого ключа, створений на попередньому кроці.
  • user - ім’я користувача на віддаленій машині.
  • 192.168.0.2 - IP або домен віддаленої машини.
  • : - шлях, куди скопіювати файл dc1srv1.pub (у цьому випадку домашній каталог віддаленого користувача user).

Дозвіл на використання нового ключа

Для цього нам потрібно підключитися до серверної оболонки через протокол SSH, в іншому терміналі підключитися до віддаленої оболонки:

ssh user@192.168.0.2

Потім перевірте, чи є у вас каталог .ssh у домашній папці віддаленого користувача user, якщо його немає, створіть його:

mkdir ~/.ssh

Створіть файл authorized_keys в каталозі .ssh:

touch ~/.ssh/authorized_keys

Скопіюйте вміст відкритого ключа у файл authorized_keys:

cat ~/dc1srv1.pub >> ~/.ssh/authorized_keys

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

rm ~/dc1srv1.pub

Зміна конфігурації SSH

Щоб змінити конфігурацію ssh, відредагуйте файл /etc/ssh/sshd_config:

sudo nano /etc/ssh/sshd_config

У цьому файлі ви повинні знайти деякі параметри та явно задати їхні значення:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
...
# Заборонити авторизацію від root
PermitRootLogin no
# Дозволити авторизацію ключами
PubkeyAuthentication yes
# Заборонити challenge response
ChallengeResponseAuthentication no
# Увімкнути PAM
UsePAM yes
# Заборонити авторизацію на базі пароля
PasswordAuthentication no
...

Після збереження файлу перезапустіть службу sshd:

sudo systemctl restart sshd

🔴 ВАЖЛИВО: Після перезапуску sshd нова конфігурація набуде чинності. Рекомендовано НЕ ЗАКРИВАТИ ваш поточний відкритий сеанс ssh і зберігати його, доки ви не перевірите та не переконаєтеся, що ваш новий ключ ssh працює в ІНШОМУ вікні терміналу. У цьому випадку, якщо щось піде не так, ви все одно можете повернути зміни до файлу ssh_config і перезапустити демон sshd, щоб застосувати попередню конфігурацію.

Перевірка SSH авторизації

Переконайтеся що авторизація через пароль НЕ працює

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

ssh root@192.168.0.2

або:

ssh user@192.168.0.2

Ви повинні отримати повідомлення про помилку Permission denied (publickey).

Переконайтеся що авторизація через RSA ключ працює

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

ssh -i ~/.ssh/dc1srv1 user@192.168.0.2

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

Висновки

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

Всі права захищено.