user@server:~$ ssh [email protected]Welcome to server.Last login: 2026-05-26$ █

Безпечна оболонка (SSH)

11 хв. читанняМережа

SSH — це протокол, який керує невидимою половиною Інтернету: кожною віддаленою консоллю системного адміністратора, кожним кроком розгортання розробника, кожним надсиланням Git до приватного сховища. Він замінив telnet наприкінці 1990-х і з тих пір є протоколом безпечної оболонки за замовчуванням. Знання того, що він насправді робить, робить сенсом багато операцій.

Повний текст статті подано англійською мовою нижче.

SSH (Secure Shell) — це криптографічний мережевий протокол для безпечної роботи мережевих служб у незахищеній мережі. Найчастіше використовується для віддаленого входу в командний рядок («оболонка» в назві) і для передачі файлів, але основний протокол достатньо загальний, щоб тунелювати будь-яку програму TCP. SSH був створений Тату Юлененом у 1995 році після атаки з перехопленням пароля в його університеті; реалізація OpenSSH (розпочата в 1999 році) є найпоширенішою версією сьогодні.

Що надає SSH

Три властивості:

  • Конфіденційність — зашифровано під час передачі. Спостерігачі мережі бачать зашифровані байти, а не команди чи паролі.
  • IIntegrity — змінені пакети виявляються та відхиляються.
  • Автентифікація обох сторін — клієнт автентифікується на сервері (пароль, відкритий ключ або інший метод), а сервер автентифікується на клієнт (через ключ хоста).

Поєднання замінює старіший пакет telnet, rlogin, rsh і rcp — усі вони передають облікові дані у відкритому вигляді.

Як працюють з’єднання SSH

Рукостискання, спрощено:

  1. Client відкриває TCP-з’єднання з сервером на порту 22 (може налаштувати).
  2. Обидві сторони обмінюються рядками версій.
  3. Обидві сторони обмінюються підтримуваними алгоритмами; оберіть найнадійніший взаємний шифр, KEX, MAC.
  4. Key exchange — як правило, криві X25519 або NIST. Обидві сторони отримують спільний секрет, не проходячи через канал у відкритому вигляді.
  5. Сервер надсилає свій ключ хоста, підписаний спільним секретом. Клієнт перевіряє ~/.ssh/known_hosts.
  6. З цього моменту все зашифровано за допомогою ключів, отриманих із спільного секрету.
  7. Клієнт автентифікується — за допомогою пароля, відкритого ключа чи іншого механізму.
  8. Зашифрований сеанс відкрито. Клієнт запитує оболонку, передачу файлів, перенаправлення портів або щось, що йому насправді потрібно.

Методи автентифікації

  • Пароль. Користувач вводить пароль; він надсилається в зашифрованому вигляді всередині сеансу. Простий, але вразливий до атак із використанням облікових даних проти відкритих серверів SSH.
  • Відкритий ключ. Клієнт має закритий ключ (зазвичай у ~/.ssh/id_ed25519); сервер має відповідний відкритий ключ у ~/.ssh/authorized_keys. Клієнт підтверджує володіння закритим ключем, підписуючи запит від сервера. Жоден пароль не проходить мережею. Рекомендоване значення за замовчуванням майже для всіх випадків використання.
  • На основі сертифіката. ЦС підписує сертифікат для ключа користувача, включаючи термін дії та обмеження. Сервери довіряють ЦС, автоматично довіряють підписаним сертифікатам. Правильна модель для організацій з великою кількістю користувачів; замінює ssh-key-distribution nightmare.
  • FIDO2 / hardware-key SSH. Остання версія OpenSSH підтримує ключі, захищені апаратним маркером безпеки. Захищений від фішингу, вимагає фізичного володіння.
  • Багатофакторний — поєднайте вищезазначене. Пароль + ключ або пароль + апаратний маркер.

Доступ до оболонки поза межами: переадресація портів

SSH може тунелювати довільний трафік TCP через зашифрований сеанс:

  • Переадресація локального порту (-L): ssh -L 9000:internal:3306 user@bastion відкриває локальний порт 9000, який тунелює до internal:3306 через бастіонний хост. Корисно для доступу до внутрішніх служб через вузол переходу.
  • Віддалене перенаправлення портів (-R): протилежний напрямок. Віддалений хост отримує порт, який тунелює назад до служби на вашій машині.
  • Динамічна переадресація портів (-D): SSH створює проксі-сервер SOCKS5 на вашій локальній машині. TCP-трафік будь-якої програми, спрямованої на нього, тунелюється через сеанс SSH. По суті, однокористувацька VPN через SSH.

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

Екосистема OpenSSH

  • ssh — клієнт
  • sshd — серверний демон
  • scp — захищена копія (застаріла, тепер переважно замінена на sftp під hood)
  • sftp — безпечний FTP, окремий протокол, який працює всередині SSH
  • ssh-agent — кешує розшифровані ключі в пам’яті, щоб ви не вводили парольну фразу connection
  • ssh-keygen — створює пари ключів
  • ssh-copy-id — копіює ваш відкритий ключ у віддалений файл authorized_keys

Захист SSH-сервера

An Сервер SSH у загальнодоступному Інтернеті постійно бачить сканування облікових даних. Захист:

  • Вимкнути автентифікацію паролем. Лише відкриті ключі. Видаляє весь вектор атаки із заповнення обліковими даними.
  • Використовуйте ключі Ed25519. Сучасний, швидкий, маленький. ssh-keygen -t ed25519 — правильна команда для нових ключів.
  • Використовуйте порт, відмінний від стандартного. Маргінальний; здебільшого зменшує шум у журналі сканування.
  • fail2ban або sshguard — блокувати IP-адреси після повторних невдалих спроб.
  • Обмежити облікові записи користувачів, які можуть SSH. AllowUsers sshd_config.
  • Використовуйте VPN або Tailscale — взагалі не надавайте доступ до SSH загальнодоступному Інтернету, якщо можете цього уникнути.
  • Аудит відомих_хостів і авторизованих_ключів. Видаліть ключі для користувачів, які залишилися; перевірте наявність неочікуваних записів.

Часті запитання

Який порт використовує SSH?
22 за замовчуванням. Порт налаштовується; деякі оператори переміщують SSH на нестандартний порт, щоб зменшити трафік сканування в журналах. Це безпека через невідомість — корисна для гігієни, а не для фактичної безпеки. Справжня безпека – це надійна автентифікація.
Чи SSH безпечніший за HTTPS?
Різні моделі загроз. Обидва використовують сучасну криптографію та, по суті, однаково безпечні на рівні протоколу. SSH зазвичай використовується з автентифікацією за допомогою відкритого ключа (без паролів, дуже надійний), тоді як багато сайтів HTTPS все ще використовують автентифікацію за паролем (слабша за замовчуванням). Протоколи є одноранговими; практики розгортання відрізняються.
Чи можу я використовувати SSH для передачі файлів?
так <code>scp</code> і <code>sftp</code> працюють через SSH. SFTP є більш потужним сучасним вибором — відновлювані передачі, рекурсивні операції, атомарний запис. <code>rsync</code> також може використовувати SSH як транспортний засіб і є правильним інструментом для будь-якої нетривіальної передачі.
Що таке ключ SSH?
Пара відкритий/приватний ключ, що використовується для автентифікації. Приватний ключ знаходиться в <code>~/.ssh/id_*</code> на вашій машині; відкритий ключ встановлюється в <code>~/.ssh/authorized_keys</code> на серверах, до яких ви підключаєтеся. Втрата закритого ключа без парольної фрази є серйозною проблемою — будь-хто, хто має його, може увійти як ви. Завжди захищайте ключі SSH за допомогою парольної фрази.
Чому SSH каже "ключ хоста змінено"?
Ключ ідентифікації сервера змінився з моменту вашого останнього з’єднання — або сервер перебудували, або ключ було змінено, або щось не так (найбільш тривожний випадок: хтось видає себе за сервер). Не приймайте сліпо новий ключ; перевірити поза межами мережі в оператора сервера. Якщо це була законна ротація, видаліть старий ключ із unknown_hosts і прийміть новий.
Пояснення SSH: як Secure Shell замінив Telnet і що всередині кожного сеансу SSH