Перейти до вмісту

Модуль 0.8: Сервери та SSH

Hands-On Lab Available
Ubuntu beginner 25 хв
Launch Lab ↗

Opens in Killercoda in a new tab

Складність: [QUICK] — Концепції та практичне підключення

Час на проходження: 25 хвилин

Передумови: Модуль 0.5 — Редагування файлів


Що ви зможете зробити

Розділ «Що ви зможете зробити»

Після цього модуля ви зможете:

  • Пояснити, що таке сервер і чому йому не потрібні екран або клавіатура
  • Підключитися до віддаленої машини за допомогою SSH та керувати нею через термінал
  • Розрізняти автентифікацію за паролем та за допомогою ключів SSH і пояснити, чому ключі безпечніші
  • Перевірити, чи ви перебуваєте на потрібній машині після підключення (використовуючи hostname, whoami, pwd)

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

Ці інші комп’ютери називаються серверами, а спосіб спілкування з ними — через SSH.

Коли ви працюєте з Kubernetes, ви керуєте серверами (багатьма серверами). Розуміння того, що таке сервери та як до них підключитися, не є опціональним — це фундамент.


Сервер — це просто комп’ютер. І все. Жодної магії чи таємниць.

Слово “сервер” описує те, що комп’ютер робить, а не те, чим він є. Сервер — це комп’ютер, робота якого полягає в тому, щоб обслуговувати (serve) інші комп’ютери.

Ваш ноутбук:
- Має екран, клавіатуру, трекпад
- Спроектований для ОДНІЄЇ людини, яка сидить перед ним
- Має графічний інтерфейс (вікна, іконки, миша)
- Ви переглядаєте веб-сторінки, пишете документи, дивитеся відео
Сервер:
- Часто НЕ має екрана, клавіатури чи миші
- Спроектований для обслуговування БАГАТЬОХ користувачів/комп'ютерів одночасно
- Зазвичай має ТІЛЬКИ термінальний інтерфейс (без робочого столу)
- Він розміщує веб-сайти, запускає бази даних, обробляє дані

Подумайте про це так:

  • Ваш ноутбук — це домашня кухня. Ви готуєте для себе. Ви їсте в тій же кімнаті, де готуєте. “Шеф-кухар” і “клієнт” — це одна і та ж людина.

  • Сервер — це кухня ресторану. Вона існує для того, щоб готувати їжу та відправляти її назовні, у залу, повну клієнтів. На кухні немає обідніх столів — це не її робота. Її робота — готувати та обслуговувати.

Коли ви відвідуєте веб-сайт, ваш браузер (клієнт у залі) надсилає запит на сервер (кухня позаду). Сервер готує відповідь (готує страву) і відправляє її назад у ваш браузер (подає страву).


Ваш ноутбук проти сервера

Розділ «Ваш ноутбук проти сервера»

“Під капотом” вони мають однакові основні частини:

КомпонентВаш ноутбукТиповий сервер
CPU4-8 ядер16-128 ядер
RAM8-32 ГБ64-512 ГБ
Сховище256 ГБ - 2 ТБ1 ТБ - 100 ТБ+
ЕкранТакЗазвичай ні
КлавіатураТакЗазвичай ні
Операційна системаmacOS/WindowsLinux (майже завжди)
ПризначенняОдна людина, багато завданьБагато клієнтів, специфічні завдання

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


Локальний проти віддаленого

Розділ «Локальний проти віддаленого»

Два слова, які ви чутимете постійно:

  • Локальний (Local) = ваш комп’ютер, прямо тут, перед вами
  • Віддалений (Remote) = інший комп’ютер, десь в іншому місці, до якого ви підключаєтеся через мережу
Локальний: Ваша кухня. Ви стоїте в ній.
Віддалений: Кухня в іншому місті. Ви телефонуєте їм, щоб зробити замовлення.

Коли ви вводите ls у своєму терміналі прямо зараз, ця команда виконується локально — на вашому комп’ютері.

Коли ви підключаєтеся до сервера і вводите ls, ця команда виконується віддалено — на сервері. Але у вашому терміналі це виглядає точно так само. У цьому і полягає краса.

Швидка перевірка: локально чи віддалено?

Розділ «Швидка перевірка: локально чи віддалено?»

Зупиніться та подумайте: Класифікуйте ці 5 сценаріїв як локальні або віддалені операції.

  1. Редагування фото на робочому столі вашого ноутбука.
  2. Використання SSH для перевірки логів веб-сервера в Лондоні.
  3. Запуск pwd у терміналі відразу після його відкриття.
  4. Введення ls після підключення через ssh admin@10.0.0.5.
  5. Ваш браузер запитує веб-сторінку з Вікіпедії.
Відповіді 1. **Локально** (відбувається на машині перед вами) 2. **Віддалено** (ви кажете далекому серверу показати його логи) 3. **Локально** (ви ще не підключилися до іншої машини) 4. **Віддалено** (ваш термінал тепер керує машиною 10.0.0.5) 5. **Віддалено** (сервер Вікіпедії надсилає вам дані сторінки)

SSH: ваш безпечний тунель до віддалених кухонь

Розділ «SSH: ваш безпечний тунель до віддалених кухонь»

SSH розшифровується як Secure Shell (безпечна оболонка). Це програма, яка дозволяє безпечно відкрити сесію термінала на віддаленому комп’ютері.

Уявіть SSH як захищену телефонну лінію до віддаленої кухні. Ви берете слухавку (відкриваєте SSH), набираєте номер (підключаєтеся до сервера) і починаєте давати замовлення (вводити команди). Шеф-кухар на віддаленій кухні виконує їх, а ви чуєте результат через телефон.

Частина “безпечна” (secure) є важливою: все, що ви надсилаєте через SSH, шифрується. Ніхто не може підслухати вашу розмову. Це як приватна телефонна лінія зі скремблером.

Кілька слів про змінні середовища

Розділ «Кілька слів про змінні середовища»

Іноді ви бачитимете такі речі, як $USER або $HOME у командах чи документації. Це змінні середовища (environment variables) — іменовані контейнери, які ваша система автоматично заповнює корисними значеннями.

  • $USER містить ваше ім’я користувача
  • $HOME містить шлях до вашого домашнього каталогу

Спробуйте їх:

Terminal window
echo $USER
echo $HOME

Вам не потрібно їх встановлювати — ваш комп’ютер робить це за вас, коли ви входите в систему. Ми згадуємо про це зараз, тому що команди SSH часто використовують $USER, і ви бачитимете змінні середовища протягом усієї своєї кар’єри.

Запустіть ці команди у своєму терміналі прямо зараз:

Terminal window
echo $USER
echo $HOME

Зупиніться та подумайте: Якщо ви підключитеся до віддаленого сервера за допомогою ssh chef@192.168.1.100, а потім запустите echo $USER, що він виведе? Ім’я користувача вашого ноутбука чи chef?

Відповідь Він виведе chef! Коли ви підключаєтеся до сервера через SSH, команди виконуються в контексті віддаленого користувача. Змінна $USER на цьому сервері встановлена для того користувача, під яким ви увійшли.

Базова команда SSH виглядає так:

Terminal window
ssh username@ip-address

Розберемо її:

  • ssh — програма, яку ви запускаєте
  • username — ім’я вашого облікового запису на віддаленому сервері (як ваш бейдж на віддаленій кухні)
  • @ — просто роздільник (символ “at”)
  • ip-address — адреса віддаленого сервера (як номер телефону кухні)

Реальний приклад може виглядати так:

Terminal window
ssh chef@192.168.1.100

Або з доменним ім’ям замість IP-адреси:

Terminal window
ssh chef@kitchen.example.com

Що відбувається під час підключення

Розділ «Що відбувається під час підключення»
1. Ви вводите: ssh chef@kitchen.example.com
2. SSH зв'язується з віддаленим сервером
3. Сервер запитує: "Хто ви? Доведіть це."
4. Ви надаєте доказ (пароль або ключ — про це нижче)
5. Сервер каже: "Ласкаво просимо, шеф. Ось ваш термінал."
6. Ваше запрошення (prompt) змінюється, показуючи ім'я віддаленого сервера
7. Кожна команда, яку ви вводите, тепер виконується на ВІДДАЛЕНОМУ сервері
8. Введіть "exit", щоб від'єднатися та повернутися до свого локального термінала

Ваше запрошення термінала може змінитися з:

yourname@your-laptop ~ $

на:

chef@remote-server ~ $

Саме так ви розумієте, що підключені до іншої машини.


Паролі проти ключів SSH

Розділ «Паролі проти ключів SSH»

Є два способи підтвердити свою особу на віддаленому сервері:

Найпростіший спосіб. Сервер запитує пароль, ви його вводите.

Terminal window
ssh chef@kitchen.example.com
# Сервер запитує: chef@kitchen.example.com's password:
# Ви вводите пароль (він не відображатиметься на екрані — це нормально)

Паролі працюють, але мають недоліки:

  • Ви повинні вводити їх щоразу
  • Їх можна вгадати або вкрасти
  • Вони незручні для автоматизованих систем

Ключі SSH (кращий спосіб)

Розділ «Ключі SSH (кращий спосіб)»

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

Ключі SSH працюють як система “замок і ключ”:

У вас є КЛЮЧ (private key) — зберігається на вашому комп'ютері, ніколи не передається.
У сервера є ЗАМОК (public key) — він знає, який ключ підходить.
Коли ви підключаєтеся:
1. Ви пред'являєте свій ключ
2. Сервер перевіряє: "Чи підходить цей ключ до мого замка?"
3. Якщо так: "Заходьте!" (пароль не потрібен)
4. Якщо ні: "Доступ заборонено."

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

Генерація ключів SSH (вам не потрібно робити це зараз, просто знайте як):

Terminal window
ssh-keygen -t ed25519

Це створює два файли:

  • ~/.ssh/id_ed25519 — Ваш приватний ключ (ключ). НІКОЛИ нікому його не передавайте.
  • ~/.ssh/id_ed25519.pub — Ваш публічний ключ (замок). Ви можете вільно ним ділитися.

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

Подумайте про це так: Приватний ключ — це ваш ключ від дому. Публічний ключ — це копія замка на ваших дверях. Ви можете дати замок будь-кому і сказати: “постав це на свої двері”. Тепер ваш ключ відкриває і їхні двері також. Але ніхто не може зробити ключ, просто дивлячись на замок.


Загальні параметри SSH

Розділ «Загальні параметри SSH»
ПараметрЩо він робитьПриклад
-pПідключитися через інший порт (типово 22)ssh -p 2222 chef@server.com
-iВикористати конкретний файл ключаssh -i ~/.ssh/mykey chef@server.com
-vРежим детального виводу (показує, що відбувається — корисно для налагодження)ssh -v chef@server.com

Міні-вправа: Складіть команду

Розділ «Міні-вправа: Складіть команду»

Зупиніться та подумайте: Напишіть точну команду SSH для підключення до користувача admin на сервері 10.0.0.5, використовуючи порт 2222 та файл ключа ~/.ssh/work_key.

Відповідь
Terminal window
ssh -p 2222 -i ~/.ssh/work_key admin@10.0.0.5

(Примітка: порядок -p та -i не має значення, головне, щоб вони йшли перед частиною user@host).


Життєвий цикл підключення

Розділ «Життєвий цикл підключення»
Ваш комп'ютер Віддалений сервер
| |
| --- ssh chef@server.com ----------> |
| | "Запит на підключення отримано"
| <--- "Доведіть свою особу" -------- |
| |
| --- надсилає ключ/пароль ---------> |
| | "Особу підтверджено"
| <--- "Вітаємо! Ось ваша оболонка" -- |
| |
| --- ls, pwd, nano тощо -----------> | (команди виконуються ТУТ, на сервері)
| <--- [ ПУСТО 1: Передбачте, що станеться тут ] --- |
| |
| --- [ ПУСТО 2: Як від'єднатися? ] ------> |
| | "До побачення"
| (повернення до локального термінала) |

Зупиніться та подумайте: Заповніть два пустих місця на діаграмі вище. Що сервер надсилає назад після того, як ви запустите команду, і яку команду ви вводите, щоб від’єднатися?

Відповіді ПУСТО 1: Сервер надсилає назад результати/вивід ваших команд.
ПУСТО 2: Ви вводите exit, щоб від'єднатися та повернутися до свого локального термінала.

Зупиніться та подумайте: Якщо ви підключені через SSH до сервера і запустите rm -rf /home/yourname/projects, що станеться? Чи видалить це файли на вашому ноутбуці чи на сервері? Це не питання з підвохом — але саме через таку помилку траплялися реальні збої в системах. Завжди перевіряйте hostname після підключення, щоб переконатися, що ви на тій машині, на якій думаєте.

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


Чому це важливо для Kubernetes

Розділ «Чому це важливо для Kubernetes»

Kubernetes працює на серверах — зазвичай на багатьох серверах. Типовий кластер Kubernetes може мати:

  • 3 сервери для “control plane” (офіс управління рестораном)
  • 10-100+ серверів як “worker nodes” (кухні, які безпосередньо готують їжу)

Ви використовуватимете SSH для підключення до цих серверів, усунення несправностей, перевірки логів та керування конфігураціями. Команди, які ви вивчили в попередніх модулях — ls, cd, nano, cat — працюють на цих віддалених серверах точно так само.


  • SSH був винайдений у 1995 році фінським дослідником на ім’я Тату Ілонен після того, як його університетська мережа зазнала атаки зі збором паролів. До SSH люди використовували telnet для підключення до віддалених комп’ютерів, який передавав усе (включаючи паролі) відкритим текстом, який міг прочитати будь-хто в мережі. SSH зашифрував з’єднання, зробивши його безпечним. Це була настільки гарна ідея, що він став глобальним стандартом майже за одну ніч.

  • Порт 22 був призначений особисто. Коли Тату Ілонен створював SSH, йому потрібен був номер порту. Він написав електронного листа організації, яка керує номерами портів (IANA), і вони просто призначили йому порт 22. Він отримав його протягом дня. Сьогодні порт 22 є одним із найбільш відомих номерів портів у комп’ютерному світі.

  • Міжнародна космічна станція використовує SSH. Астронавти та наземний центр керування використовують SSH для безпечного управління комп’ютерними системами станції. Той самий інструмент, який ви вивчаєте в цьому модулі, використовується для управління комп’ютерами на орбіті Землі.


ПомилкаЧому це проблемаЩо робити натомість
Передача вашого приватного ключаБудь-хто з вашим приватним ключем може отримати доступ до ваших серверівНіколи не передавайте id_ed25519 (файл БЕЗ .pub). Передавайте тільки файл .pub
Забути, що ви на віддаленому серверіВи можете видалити файли або змінити налаштування не на тій машиніЗавжди перевіряйте своє запрошення в терміналі та використовуйте hostname, щоб перевірити, на якій машині ви перебуваєте
Введення пароля в неправильне полеSSH приховує введення пароля (ні крапок, ні зірочок). Люди думають, що він зламався, і вчать його десь у видимому місціКоли SSH запитує пароль, просто вводьте його наосліп і натисніть Enter. Він ОТРИМУЄ ваші натискання клавіш
Не від’єднуватися після завершення роботиЗалишені відкритими сесії SSH витрачають ресурси сервера і можуть бути ризиком для безпекиВведіть exit або натисніть Ctrl + D, коли закінчите
Панікувати при розриві з’єднанняПеребої в мережі трапляються — це не означає, що щось зламалосяПросто підключіться знову тією ж командою SSH. Ваші файли на сервері нікуди не зникли

Контрольні запитання

Розділ «Контрольні запитання»
  1. Ви підключилися до сервера через SSH і запустили hostname — він показує назву вашого ноутбука. Що сталося?

    Відповідь Насправді ви не підключені до віддаленого сервера! Або з'єднання SSH не вдалося, або ви вже ввели `exit` і повернулися до свого локального термінала, не помітивши цього. Оскільки ви запустили `hostname` і побачили назву свого ноутбука, ви підтвердили, що ваші команди наразі виконуються локально, а не віддалено. Завжди перевіряйте своє запрошення термінала та використовуйте `hostname` для перевірки середовища, щоб уникнути виконання руйнівних команд на нетій машині.
  2. Ваш колега просить вас надіслати йому електронною поштою ваш приватний ключ SSH, щоб він міг швидко увійти на сервер, яким ви обидва керуєте. Що ви скажете і чому?

    Відповідь Ви повинні відповісти "категорично ні". Ваш приватний ключ (наприклад, `id_ed25519`) — це ваш особистий "ключ від дому", і його ніколи не можна нікому передавати, навіть колегам. Якщо їм потрібен доступ до сервера, вони повинні згенерувати власну пару ключів SSH і дати вам свій *публічний* ключ (`id_ed25519.pub`), який ви потім зможете додати до списку дозволених на сервері. Це гарантує безпеку доступу для кожного і дозволяє вам пізніше скасувати їхній доступ, не змінюючи власний ключ.
  3. Яка різниця між приватним ключем і публічним ключем?

    Відповідь Приватний ключ залишається на вашому комп'ютері і ніколи не повинен передаватися — це як ваш ключ від дому. Публічний ключ можна вільно передавати, він розміщується на серверах, до яких ви хочете отримати доступ — це як замок. Коли ви підключаєтеся, сервер перевіряє, чи відповідає ваш приватний ключ збереженому публічному ключу. Якщо відповідає — ви всередині. Знання публічного ключа не допоможе нікому видати себе за вас — для цього потрібен приватний ключ.
  4. Коли ви підключені до віддаленого сервера через SSH і вводите touch recipe.txt, де створюється файл?

    Відповідь На віддаленому сервері, а не на вашій локальній машині. Коли ви підключені через SSH, кожна команда, яку ви вводите, виконується на віддаленому сервері. Файл `recipe.txt` створюється у файловій системі сервера. Ваша локальна машина не отримує копію. Щоб перевірити, на якій машині ви перебуваєте, подивіться на запрошення термінала або введіть `hostname`.
  5. Вищий рівень складності: вам потрібно автоматизувати розгортання з CI-сервера (Continuous Integration) на 50 робочих машин. Ви б використали пароль чи автентифікацію на основі ключів? Поясніть свою думку.

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

Практична вправа: SSH до Localhost

Розділ «Практична вправа: SSH до Localhost»

Ми потренуємося використовувати SSH, підключившись до вашого власного комп’ютера. Це може здатися безглуздим (“Я вже тут!”), але це демонструє, як саме працює SSH — і цей досвід ідентичний підключенню до справжнього віддаленого сервера.

Спочатку увімкніть Remote Login (SSH), якщо він ще не увімкнений:

  1. Відкрийте System Settings (Системні параметри)
  2. Перейдіть до General > Sharing (Загальні > Спільний доступ)
  3. Увімкніть Remote Login (Віддалений вхід)

Тепер у вашому терміналі:

Terminal window
ssh localhost

Ви побачите щось подібне до:

The authenticity of host 'localhost (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:AbCdEf123456...
Are you sure you want to continue connecting (yes/no)?

Введіть yes і натисніть Enter. (Це з’являється лише під час першого підключення до нового сервера. Комп’ютер каже: “Я ніколи раніше не спілкувався з цим сервером — ви впевнені, що він справжній?”)

Введіть пароль вашого Mac, коли з’явиться відповідний запит.

Тепер ви “підключені”. Спробуйте:

Terminal window
hostname
pwd
ls
echo "Hello from SSH!"

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

Щоб від’єднатися:

Terminal window
exit

На більшості систем Linux SSH увімкнено типово. Якщо ні:

Terminal window
sudo apt install openssh-server # Debian/Ubuntu
sudo systemctl start sshd # Запустити службу SSH

Потім:

Terminal window
ssh localhost

Виконайте ті самі кроки, що й для macOS вище.

SSH до localhost на Windows складніший. Натомість просто потренуйте синтаксис команди:

# Ось як виглядало б підключення до справжнього сервера:
ssh yourname@192.168.1.100
# Ви побачите:
yourname@192.168.1.100's password:
# Після введення пароля:
yourname@remote-server:~$
# Тепер кожна команда виконується на віддаленому сервері.
# Введіть "exit", щоб від'єднатися.

Що сталося б зі справжнім сервером

Розділ «Що сталося б зі справжнім сервером»

Якби у вас був хмарний сервер (ви отримаєте його, коли почнете трек Kubernetes), досвід був би таким:

Terminal window
# Підключення до сервера у хмарі
ssh ubuntu@54.123.45.67
# Ви б побачили:
ubuntu@ip-54-123-45-67:~$
# Тепер ви всередині Linux-сервера в якомусь дата-центрі
# Кожна команда виконується там:
ls # Показує файли на сервері
pwd # Показує ваш шлях на сервері
nano # Відкриває nano на сервері
cat /etc/os-release # Показує операційну систему сервера
# Від'єднайтеся, коли закінчите
exit

Це виглядало б, відчувалося і працювало точно так само, як вправа з localhost. Єдина різниця — фізичне розташування комп’ютера.

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


Наступний модуль: Модуль 0.9: Програмне забезпечення та пакети — дізнайтеся, як програмне забезпечення встановлюється на ваш комп’ютер, що таке менеджери пакетів та як встановлювати інструменти через термінал.


Ви щойно скористалися інструментом, який старші інженери використовують щодня. Ви на своєму місці.