Модуль 0.8: Сервери та SSH
Складність:
[QUICK]— Концепції та практичне підключенняЧас на проходження: 25 хвилин
Передумови: Модуль 0.5 — Редагування файлів
Що ви зможете зробити
Розділ «Що ви зможете зробити»Після цього модуля ви зможете:
- Пояснити, що таке сервер і чому йому не потрібні екран або клавіатура
- Підключитися до віддаленої машини за допомогою SSH та керувати нею через термінал
- Розрізняти автентифікацію за паролем та за допомогою ключів SSH і пояснити, чому ключі безпечніші
- Перевірити, чи ви перебуваєте на потрібній машині після підключення (використовуючи
hostname,whoami,pwd)
Чому це важливо
Розділ «Чому це важливо»Все, що ви робили до цього моменту, відбувалося на вашому комп’ютері. Ваша кухня, ваші файли, ваш термінал. Але в реальному світі технологій більшість подій відбувається на комп’ютерах, які знаходяться десь в іншому місці — у дата-центрі, у хмарі або в стійці з обладнанням, до якого ви ніколи не торкнетеся фізично.
Ці інші комп’ютери називаються серверами, а спосіб спілкування з ними — через SSH.
Коли ви працюєте з Kubernetes, ви керуєте серверами (багатьма серверами). Розуміння того, що таке сервери та як до них підключитися, не є опціональним — це фундамент.
Що таке сервер?
Розділ «Що таке сервер?»Сервер — це просто комп’ютер. І все. Жодної магії чи таємниць.
Слово “сервер” описує те, що комп’ютер робить, а не те, чим він є. Сервер — це комп’ютер, робота якого полягає в тому, щоб обслуговувати (serve) інші комп’ютери.
Ваш ноутбук: - Має екран, клавіатуру, трекпад - Спроектований для ОДНІЄЇ людини, яка сидить перед ним - Має графічний інтерфейс (вікна, іконки, миша) - Ви переглядаєте веб-сторінки, пишете документи, дивитеся відео
Сервер: - Часто НЕ має екрана, клавіатури чи миші - Спроектований для обслуговування БАГАТЬОХ користувачів/комп'ютерів одночасно - Зазвичай має ТІЛЬКИ термінальний інтерфейс (без робочого столу) - Він розміщує веб-сайти, запускає бази даних, обробляє даніАналогія з кухнею
Розділ «Аналогія з кухнею»Подумайте про це так:
-
Ваш ноутбук — це домашня кухня. Ви готуєте для себе. Ви їсте в тій же кімнаті, де готуєте. “Шеф-кухар” і “клієнт” — це одна і та ж людина.
-
Сервер — це кухня ресторану. Вона існує для того, щоб готувати їжу та відправляти її назовні, у залу, повну клієнтів. На кухні немає обідніх столів — це не її робота. Її робота — готувати та обслуговувати.
Коли ви відвідуєте веб-сайт, ваш браузер (клієнт у залі) надсилає запит на сервер (кухня позаду). Сервер готує відповідь (готує страву) і відправляє її назад у ваш браузер (подає страву).
Ваш ноутбук проти сервера
Розділ «Ваш ноутбук проти сервера»“Під капотом” вони мають однакові основні частини:
| Компонент | Ваш ноутбук | Типовий сервер |
|---|---|---|
| CPU | 4-8 ядер | 16-128 ядер |
| RAM | 8-32 ГБ | 64-512 ГБ |
| Сховище | 256 ГБ - 2 ТБ | 1 ТБ - 100 ТБ+ |
| Екран | Так | Зазвичай ні |
| Клавіатура | Так | Зазвичай ні |
| Операційна система | macOS/Windows | Linux (майже завжди) |
| Призначення | Одна людина, багато завдань | Багато клієнтів, специфічні завдання |
Сервер — це, по суті, потужний комп’ютер, оптимізований для обслуговування багатьох запитів одночасно, який працює цілодобово і керується віддалено.
Локальний проти віддаленого
Розділ «Локальний проти віддаленого»Два слова, які ви чутимете постійно:
- Локальний (Local) = ваш комп’ютер, прямо тут, перед вами
- Віддалений (Remote) = інший комп’ютер, десь в іншому місці, до якого ви підключаєтеся через мережу
Локальний: Ваша кухня. Ви стоїте в ній.Віддалений: Кухня в іншому місті. Ви телефонуєте їм, щоб зробити замовлення.Коли ви вводите ls у своєму терміналі прямо зараз, ця команда виконується локально — на вашому комп’ютері.
Коли ви підключаєтеся до сервера і вводите ls, ця команда виконується віддалено — на сервері. Але у вашому терміналі це виглядає точно так само. У цьому і полягає краса.
Швидка перевірка: локально чи віддалено?
Розділ «Швидка перевірка: локально чи віддалено?»Зупиніться та подумайте: Класифікуйте ці 5 сценаріїв як локальні або віддалені операції.
- Редагування фото на робочому столі вашого ноутбука.
- Використання SSH для перевірки логів веб-сервера в Лондоні.
- Запуск
pwdу терміналі відразу після його відкриття.- Введення
lsпісля підключення черезssh admin@10.0.0.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містить шлях до вашого домашнього каталогу
Спробуйте їх:
echo $USERecho $HOMEВам не потрібно їх встановлювати — ваш комп’ютер робить це за вас, коли ви входите в систему. Ми згадуємо про це зараз, тому що команди SSH часто використовують $USER, і ви бачитимете змінні середовища протягом усієї своєї кар’єри.
Спробуйте зараз
Розділ «Спробуйте зараз»Запустіть ці команди у своєму терміналі прямо зараз:
echo $USERecho $HOMEЗупиніться та подумайте: Якщо ви підключитеся до віддаленого сервера за допомогою
ssh chef@192.168.1.100, а потім запуститеecho $USER, що він виведе? Ім’я користувача вашого ноутбука чиchef?Відповідь
Він виведеchef! Коли ви підключаєтеся до сервера через SSH, команди виконуються в контексті віддаленого користувача. Змінна$USERна цьому сервері встановлена для того користувача, під яким ви увійшли.
Команда SSH
Розділ «Команда SSH»Базова команда SSH виглядає так:
ssh username@ip-addressРозберемо її:
ssh— програма, яку ви запускаєтеusername— ім’я вашого облікового запису на віддаленому сервері (як ваш бейдж на віддаленій кухні)@— просто роздільник (символ “at”)ip-address— адреса віддаленого сервера (як номер телефону кухні)
Реальний приклад може виглядати так:
ssh chef@192.168.1.100Або з доменним ім’ям замість IP-адреси:
ssh chef@kitchen.example.comЩо відбувається під час підключення
Розділ «Що відбувається під час підключення»1. Ви вводите: ssh chef@kitchen.example.com2. SSH зв'язується з віддаленим сервером3. Сервер запитує: "Хто ви? Доведіть це."4. Ви надаєте доказ (пароль або ключ — про це нижче)5. Сервер каже: "Ласкаво просимо, шеф. Ось ваш термінал."6. Ваше запрошення (prompt) змінюється, показуючи ім'я віддаленого сервера7. Кожна команда, яку ви вводите, тепер виконується на ВІДДАЛЕНОМУ сервері8. Введіть "exit", щоб від'єднатися та повернутися до свого локального терміналаВаше запрошення термінала може змінитися з:
yourname@your-laptop ~ $на:
chef@remote-server ~ $Саме так ви розумієте, що підключені до іншої машини.
Паролі проти ключів SSH
Розділ «Паролі проти ключів SSH»Є два способи підтвердити свою особу на віддаленому сервері:
Паролі
Розділ «Паролі»Найпростіший спосіб. Сервер запитує пароль, ви його вводите.
ssh chef@kitchen.example.com# Сервер запитує: chef@kitchen.example.com's password:# Ви вводите пароль (він не відображатиметься на екрані — це нормально)Паролі працюють, але мають недоліки:
- Ви повинні вводити їх щоразу
- Їх можна вгадати або вкрасти
- Вони незручні для автоматизованих систем
Ключі SSH (кращий спосіб)
Розділ «Ключі SSH (кращий спосіб)»Подумайте про це: Паролі можна вгадати, вкрасти або виманити за допомогою фішингу. Що, якби замість того, щоб повідомляти серверу секретне слово, ви могли б довести свою особу за допомогою чогось, що належить тільки вам — як фізичний ключ, який підходить до конкретного замка? Саме це роблять ключі SSH. Сервер ніколи не дізнається ваш “пароль” — він просто перевіряє, чи підходить ваш ключ.
Ключі SSH працюють як система “замок і ключ”:
У вас є КЛЮЧ (private key) — зберігається на вашому комп'ютері, ніколи не передається.У сервера є ЗАМОК (public key) — він знає, який ключ підходить.
Коли ви підключаєтеся:1. Ви пред'являєте свій ключ2. Сервер перевіряє: "Чи підходить цей ключ до мого замка?"3. Якщо так: "Заходьте!" (пароль не потрібен)4. Якщо ні: "Доступ заборонено."Це як мати фізичний ключ від дверей віддаленої кухні. Вам не потрібно нікому говорити пароль — ви просто відмикаєте двері.
Генерація ключів SSH (вам не потрібно робити це зараз, просто знайте як):
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.
Відповідь
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. Ваші файли на сервері нікуди не зникли |
Контрольні запитання
Розділ «Контрольні запитання»-
Ви підключилися до сервера через SSH і запустили
hostname— він показує назву вашого ноутбука. Що сталося?Відповідь
Насправді ви не підключені до віддаленого сервера! Або з'єднання SSH не вдалося, або ви вже ввели `exit` і повернулися до свого локального термінала, не помітивши цього. Оскільки ви запустили `hostname` і побачили назву свого ноутбука, ви підтвердили, що ваші команди наразі виконуються локально, а не віддалено. Завжди перевіряйте своє запрошення термінала та використовуйте `hostname` для перевірки середовища, щоб уникнути виконання руйнівних команд на нетій машині. -
Ваш колега просить вас надіслати йому електронною поштою ваш приватний ключ SSH, щоб він міг швидко увійти на сервер, яким ви обидва керуєте. Що ви скажете і чому?
Відповідь
Ви повинні відповісти "категорично ні". Ваш приватний ключ (наприклад, `id_ed25519`) — це ваш особистий "ключ від дому", і його ніколи не можна нікому передавати, навіть колегам. Якщо їм потрібен доступ до сервера, вони повинні згенерувати власну пару ключів SSH і дати вам свій *публічний* ключ (`id_ed25519.pub`), який ви потім зможете додати до списку дозволених на сервері. Це гарантує безпеку доступу для кожного і дозволяє вам пізніше скасувати їхній доступ, не змінюючи власний ключ. -
Яка різниця між приватним ключем і публічним ключем?
Відповідь
Приватний ключ залишається на вашому комп'ютері і ніколи не повинен передаватися — це як ваш ключ від дому. Публічний ключ можна вільно передавати, він розміщується на серверах, до яких ви хочете отримати доступ — це як замок. Коли ви підключаєтеся, сервер перевіряє, чи відповідає ваш приватний ключ збереженому публічному ключу. Якщо відповідає — ви всередині. Знання публічного ключа не допоможе нікому видати себе за вас — для цього потрібен приватний ключ. -
Коли ви підключені до віддаленого сервера через SSH і вводите
touch recipe.txt, де створюється файл?Відповідь
На віддаленому сервері, а не на вашій локальній машині. Коли ви підключені через SSH, кожна команда, яку ви вводите, виконується на віддаленому сервері. Файл `recipe.txt` створюється у файловій системі сервера. Ваша локальна машина не отримує копію. Щоб перевірити, на якій машині ви перебуваєте, подивіться на запрошення термінала або введіть `hostname`. -
Вищий рівень складності: вам потрібно автоматизувати розгортання з CI-сервера (Continuous Integration) на 50 робочих машин. Ви б використали пароль чи автентифікацію на основі ключів? Поясніть свою думку.
Відповідь
Ви повинні використовувати автентифікацію на основі ключів. Якщо використовувати паролі, автоматизований скрипт або зупиниться в очікуванні людини, яка введе пароль 50 разів, або вам доведеться прописувати пароль прямо в скрипті (що є величезним ризиком для безпеки). З ключами SSH сервер CI може безпечно зберігати приватний ключ, а 50 робочих машин можуть бути налаштовані на довіру до його публічного ключа. Це дозволяє автоматизованій системі підключатися миттєво і безпечно без втручання людини, роблячи розгортання швидким і захищеним.
Практична вправа: SSH до Localhost
Розділ «Практична вправа: SSH до Localhost»Ми потренуємося використовувати SSH, підключившись до вашого власного комп’ютера. Це може здатися безглуздим (“Я вже тут!”), але це демонструє, як саме працює SSH — і цей досвід ідентичний підключенню до справжнього віддаленого сервера.
На macOS:
Розділ «На macOS:»Спочатку увімкніть Remote Login (SSH), якщо він ще не увімкнений:
- Відкрийте System Settings (Системні параметри)
- Перейдіть до General > Sharing (Загальні > Спільний доступ)
- Увімкніть Remote Login (Віддалений вхід)
Тепер у вашому терміналі:
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, коли з’явиться відповідний запит.
Тепер ви “підключені”. Спробуйте:
hostnamepwdlsecho "Hello from SSH!"Все виглядає так само, тому що ви підключаєтеся через SSH до самого себе. Але механізм ідентичний підключенню до сервера на іншому кінці світу.
Щоб від’єднатися:
exitНа Linux:
Розділ «На Linux:»На більшості систем Linux SSH увімкнено типово. Якщо ні:
sudo apt install openssh-server # Debian/Ubuntusudo systemctl start sshd # Запустити службу SSHПотім:
ssh localhostВиконайте ті самі кроки, що й для macOS вище.
На Windows:
Розділ «На Windows:»SSH до localhost на Windows складніший. Натомість просто потренуйте синтаксис команди:
# Ось як виглядало б підключення до справжнього сервера:ssh yourname@192.168.1.100
# Ви побачите:yourname@192.168.1.100's password:
# Після введення пароля:yourname@remote-server:~$
# Тепер кожна команда виконується на віддаленому сервері.# Введіть "exit", щоб від'єднатися.Що сталося б зі справжнім сервером
Розділ «Що сталося б зі справжнім сервером»Якби у вас був хмарний сервер (ви отримаєте його, коли почнете трек Kubernetes), досвід був би таким:
# Підключення до сервера у хмарі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: Програмне забезпечення та пакети — дізнайтеся, як програмне забезпечення встановлюється на ваш комп’ютер, що таке менеджери пакетів та як встановлювати інструменти через термінал.
Ви щойно скористалися інструментом, який старші інженери використовують щодня. Ви на своєму місці.