Вступ
SSH (Secure Shell) — це мережевий протокол, який дозволяє безпечно передавати дані між комп’ютерами. Він надає захищений доступ до віддалених серверів, що особливо корисно для адміністраторів, розробників, і всіх, хто працює з віддаленими ресурсами. SSH дозволяє уникнути прослуховування даних в мережі завдяки шифруванню, що робить його значно безпечнішим у порівнянні з протоколами, які передають дані у відкритому вигляді, як-от Telnet.
Принцип роботи
SSH працює за принципом клієнт-сервер. Клієнт підключається до сервера через визначений порт (за замовчуванням — 22), після чого встановлюється зашифроване з’єднання. Аутентифікація може здійснюватися кількома способами: за паролем, використанням ключів або двофакторною аутентифікацією. Після встановлення з’єднання весь обмін даними відбувається в зашифрованому вигляді, що гарантує конфіденційність.
Переваги протоколу
- Безпека: SSH використовує шифрування та аутентифікацію, щоб захистити дані від сторонніх.
- Зручність у використанні: Протокол підтримує команди, з’єднання з віддаленими комп’ютерами, файлові операції та багато іншого.
- Можливість тунелювання: SSH дозволяє створювати тунелі, завдяки яким можна передавати інші протоколи через захищене з’єднання.
- Гнучкість аутентифікації: Підтримка різних методів аутентифікації, як-от ключі, паролі та двофакторна аутентифікація.
Як використовувати SSH?
Для підключення до віддаленого сервера через SSH зазвичай використовують команду:
ssh ім'я_користувача@ip_адреса_сервера
Залежно від налаштувань сервера, користувач може або ввести пароль, або використовувати ключ. Також SSH дозволяє копіювати файли за допомогою утиліт scp
та rsync
, що спрощує управління файлами на віддалених системах.
Використання SSH-ключів для автентифікації
SSH-ключі забезпечують безпечний і зручний спосіб аутентифікації, дозволяючи підключатися до віддалених серверів без вводу пароля щоразу. SSH-ключі складаються з пари: приватного ключа, який зберігається на вашому локальному комп’ютері, і публічного ключа, який копіюється на сервер.
Крок 1: Створення SSH-ключів
1. Відкрийте термінал на вашому локальному комп’ютері.
2. Виконайте команду для генерації нового SSH-ключа:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
де:
- -t rsa визначає алгоритм RSA (популярний вибір).
- -b 4096 встановлює довжину ключа в 4096 бітів, що забезпечує додаткову безпеку.
- -C “your_email@example.com“ дозволяє додати коментар до ключа (часто вказують email, щоб легше ідентифікувати ключ).
3. Вам запропонують вибрати шлях для зберігання ключа (за замовчуванням ~/.ssh/id_rsa
):
- Якщо ключ вже існує, можна перезаписати його або вибрати інше ім’я.
- Далі можна задати пароль для захисту ключа (не обов’язково, але це покращує безпеку).
Крок 2: Копіювання публічного ключа на сервер
Щоб використовувати SSH-ключ для аутентифікації, потрібно скопіювати публічний ключ на сервер. Це можна зробити вручну або автоматично за допомогою команди ssh-copy-id
.
Автоматичний спосіб:
Використовуйте команду ssh-copy-id
, яка автоматично скопіює публічний ключ на сервер:
ssh-copy-id ім'я_користувача@ip_адреса_сервера
де:
- user — ваш обліковий запис на сервері.
- remote_server — IP-адреса або домен сервера.
Після виконання команди вам буде потрібно ввести пароль для аутентифікації. Ключ буде доданий до файлу ~/.ssh/authorized_keys
на сервері.
Ручний спосіб:
1. Відкрийте публічний ключ у текстовому редакторі:
cat ~/.ssh/id_rsa.pub
2. Скопіюйте вміст ключа.
3. Підключіться до сервера і відкрийте файл ~/.ssh/authorized_keys
(створіть його, якщо він не існує):
nano ~/.ssh/authorized_keys
4. Вставте публічний ключ у файл, збережіть і вийдіть.
Крок 3: Підключення до сервера за допомогою SSH-ключа
Тепер, коли ключ встановлено, можна підключатися до сервера без введення пароля:
ssh ім'я_користувача@ip_адреса_сервера
При підключенні SSH автоматично використовує ваш приватний ключ для аутентифікації. Якщо для ключа був заданий пароль, вам буде потрібно ввести його
Додаткові налаштування безпеки (опціонально)
Заборона паролів для SSH: Для підвищення безпеки на сервері можна заборонити автентифікацію за паролем, залишивши лише автентифікацію за ключами. Відкрийте файл конфігурації SSH на сервері:
sudo nano /etc/ssh/sshd_config
Знайдіть і змініть параметр:
PasswordAuthentication no
Збережіть файл і перезапустіть SSH-сервер:
sudo systemctl restart ssh
SSH-ключі надають високий рівень захисту, оскільки злом ключа набагато складніший, ніж підбір пароля.
Як побудувати SSH тунель?
SSH тунель можна використовувати для захищеної передачі даних між комп’ютерами. Наприклад, якщо ви хочете отримати доступ до веб-сервера, який доступний лише на певній внутрішній IP-адресі, можна використати команду для тунелювання:
ssh -L 8080:локальний_сервер:80 ім'я_користувача@віддалений_сервер
Ця команда створює тунель між вашим локальним комп’ютером і сервером, перенаправляючи трафік через порт 8080 до віддаленого сервера.
Також ми можемо створити зворотній (reverse) SSH-тунель, який дозволяє перенаправляти з’єднання з віддаленого сервера на локальний комп’ютер.
ssh -R 8080:localhost:80 ім'я_користувача@віддалений_сервер
Після виконання цієї команди буде створено з’єднання, через яке будь-які запити до порту 8080 на віддаленому сервері будуть перенаправлятися на порт 80 на вашому локальному комп’ютері.
Щоб відкрити тунель не виконуючи команд скористайтесь опцією -N
. Опція -N
в SSH використовується для створення з’єднання без виконання будь-яких команд на віддаленому сервері. Вона корисна, коли SSH-з’єднання використовується лише для тунелювання або переспрямування портів, а не для запуску команд чи інтерактивної сесії.
Приклад:
ssh -N -L 8080:localhost:80 ім'я_користувача@віддалений_сервер
Як задати порт для підключення до сервера?
За замовчуванням використовується 22, але якщо нам потрібно вказати інший порт, то можемо скористатись опцією -p
ssh -p 2222 ім'я_користувача@віддалений_сервер
Як задати шлях до ключа?
За замовчуванням, якщо під час підключення через SSH не вказано конкретний ключ, SSH-клієнт автоматично використовує ключі з директорії ~/.ssh
на локальному комп’ютері, де зберігаються особисті SSH-ключі.
Якщо жоден із цих ключів не знайдено, або підходящий ключ не відповідає публічному ключу на сервері, SSH-клієнт запропонує ввести пароль для підключення (якщо на сервері дозволена автентифікація за паролем).
Але якщо ключ зберігається в іншому місці або має іншу назву, можна вказати його вручну через параметр -i
:
ssh -i /path/to/private_key ім'я_користувача@віддалений_сервер
Як запустити команду на віддаленому сервері?
Щоб виконати команду на віддаленому сервері через SSH, можна використовувати наступний синтаксис, додаючи команду в кінці команди підключення SSH:
ssh ім'я_користувача@віддалений_сервер 'ls -la /path/to/directory'
Цей варіант дозволяє виконати команду ls -la /path/to/directory
на сервері без повного відкриття сесії SSH.
Висновки
SSH є потужним інструментом для забезпечення безпечного доступу до віддалених систем. Він пропонує надійний захист інформації та підтримує широкий спектр функцій для адміністраторів та користувачів. З його допомогою можна ефективно і безпечно працювати з віддаленими ресурсами, а також створювати захищені тунелі для передачі даних, що робить його важливим інструментом у сучасному світі адміністрування та кібербезпеки.