Рубріки: Теорія

Що таке протокол SSH і як його використовувати?

Сергій Бондаренко

Що таке SSH

Хоча протокол SSH і розшифровується як Secure Shell, але насправді він не є шеллом. SSH – це протокол безпечного доступу до віддалених систем. В основному SSH використовується для доступу до серверів, для віддаленого доступу до консолі, до терміналу, до командного інтерпретатора віддаленої машини (скоріше за все ПК під керуванням Linux, але може бути інше мережеве обладнання або навіть пристрій з Windows). SSH застосовується різними способами, наприклад через цей протокол можна монтувати різні віддалені файлові системи, прокидати порти і т.д. SSH – це де-факто стандарт доступу до віддалених Linux-машин.

Історія створення протоколу

SSH була розроблена ще далекого 1995 року фінським інженером Тату Юльоненом з Технологічного університету в Гельсінкі.

Тату Юльєнен

Він працював над створенням механізму захисту, який служив би альтернативою TELNET, FTP та rsh, які не могли на той час гарантувати безпечну автентифікацію користувача в мережі (для написання першої версії використовувалася бібліотека libgmp). Тільки до кінця 1995 року загальна кількість користувачів SSH-1 зросла вже до двадцяти тисяч у п’ятдесяти країнах, а до 2000 року ця кількість збільшилася до двох мільйонів. 2006 року протокол пройшов оновлення, а його версія SSH-2 стала підтримувати обмін ключами Діффі-Хеллмана (покращена захищеність), перевірка відбувалася за допомогою MAC-підписів. Друга версія мала сумісність із SSH-1. Протокол SSH-2 міг запускати будь-яку кількість сеансів оболонки через одне з’єднання SSH.

На даний момент існують дві реалізації SSH, причому практично з однаковим набором команд: приватна комерційна і безкоштовна вільна OpenSSH. Переважна кількість комп’ютерів Інтернету використовує саме OpenSSH. Комерційна реалізація протоколу створюється SSH Communications Security, і також безкоштовна для некомерційного використання. Перша версія протоколу вже давно не підтримується, через велику кількість виявлених у ній уразливостей.

Як протокол працює

Цей протокол використовує клієнт-серверну архітектуру, тому SSH складається з двох частин – клієнтської та серверної. Звичайний SSH-сервер управляється клієнтською частиною, приймаючи вхідні підключення по 22 порту (за замовчуванням). Клієнтська частина може бути реалізована під різні платформи: десктопні, мобільні, серверні та ін. На сервері, до якого ви підключаєтеся, має працювати daemon sshd.

Daemon SSH

Для підключення SSH необхідно виконати в терміналі команду

ssh username@remote_host -p port

Наприклад, для підключення до сервера 51.306.148.242 в обліковий запис serge потрібно ввести
ssh serge@51.306.148.242
В данному прикладі порт не вказуємо, він береться за замовчуванням стандартний – 22.

Тунелювання

SSH-з’єднання може забезпечувати тунелювання даних, наприклад, для пересилання файлів. Особливість цієї функції полягає в тому, що незашифрований трафік будь-якого протоколу шифрується з одного боку SSH-тунелю, а розшифровується з іншого боку з’єднання. З практичної точки зору це може бути реалізовано або за допомогою Socks-проксі, або через через програми, що підтримують SSH-тунель, або через VPN-тунель. Якщо програма працює з одним певним сервером, можна налаштувати SSH-клієнт таким чином, щоб він пропускав через SSH-тунель TCP-з’єднання, що приходять на певний TCP-порт машини, на якій запущено SSH-клієнт. Наприклад, для клієнтів Jabber використовується порт 443. Так, щоб налаштувати підключення до сервера Jabber через SSH-тунелювання, SSH-клієнт налаштовується на перенаправлення підключень з будь-якого порту локальної машини (наприклад, з порту 4430) на віддалений сервер (наприклад, jabber.example .com та порт 443):

$ ssh -L 4430:jabber.example.com:443 будь_який_хост

 

Головний плюс SSH – у його безпеці та поширеності. Цей протокол можна знайти практично на будь-якій машині з Linux. Якщо ви встановили, скажімо, стандартну Ubuntu, там вже буде встановлений SSH —  ваш основний спосіб спілкування з цією машиною, будь то віртуальна машина чи фізичне залізо. На будь-якому Linux, як правило, вже встановлено клієнт SSH «з коробки», відповідно ви вибираєте самі яким командним інтерпретатором користуватися і як це виглядатиме зовні. Якщо використовувати комп’ютер під керуванням MacOS, там можна використовувати для клієнта SSH стандартний UNIX Terminal або одну з численних надбудов. Так, наприклад, можна порекомендувати використовувати для протоколу SSH програму iTerm2.

 

iTerm2 для MacOS

Для Windows є кілька клієнтів:

  • Putty (https://www.putty.org/) – маленька, легка безкоштовна програма
  • Xshell (https://www.netsarang.com/en/xshell/) – платний клієнт (проте, вільний для некомерційного використання), який розрахований на більш серйозне використання. Цю програму можна рекомендувати тим, хто працює з великою кількістю серверів (скажімо, більше десяти).

Xshell

  • OpenSSH – вбудований клієнт, який з’явився у Windows 10.
  • Cygwin (https://cygwin.com/) – ще один клієнт під Windows, головна особливість якого полягає у тому, що він підтримує команди Linux. Наприклад, у цій програмі SSL-сертифікати створюються так само, як і в Linux. Встановивши цю програму ви можете використовувати SSH зі звичайного командного рядка, через Power Shell та ін.

Інтерфейс Pytty

Важливим елементом безпеки SSH є генерація унікального відбитка fingerprint при кожній установці Open SSH сервера. Це дозволяє ідентифікувати сервер та захиститися від його заміни. Наприклад, коли сервер фізично вимкнений, хтось може взяти його IP-адресу, прослухати всі підключення і отримати всі паролі. У цьому ж випадку ви отримуєте попередження про те, що автентифікація fingerprint порушена. Важливим елементом безпеки SSH є генерація унікального відбитка fingerprint при кожній установці Open SSH сервера. Це дозволяє ідентифікувати сервер та захиститися від його заміни. Наприклад, коли фізично сервер вимкнений, хтось може взяти його IP-адресу, прослухати всі підключення і отримати всі паролі. У цьому ж випадку ви отримуєте попередження про те, що автентифікація fingerprint порушена.

SSH та ключі

Для максимальної безпеки зазвичай прийнято відмовлятися від паролів та використовувати практику ключів. Її суть полягає в тому, що генерується два ключі, один із яких є приватним, він зберігається лише у вас, а другий ключ – публічний. Оскільки другий ключ не становить цінності без першої частини, його можна публікувати та передавати. Якщо хтось хоче зашифрувати дані, він використовує публічний ключ. При цьому навіть той, хто зашифрував інформацію, відкрити її без приватного ключа не зможе. Також це використовується і у зворотньому напрямі – для гарантування цифрового підпису. Людина може зашифрувати дані, використовуючи свій приватний ключ – будь-який користувач зможе розшифрувати дані, користуючись публічним ключем. Таким чином можна переконатися, що відправник секретної інформації володіє другою частиною ключа, що гарантує цифровий підпис. 

Використання ключів має низку переваг, пов’язаних з безпекою. Насамперед їх досить важко зламати. При достатній довжині ключа зламати його методом перебору (атака методом брутфорс) або методом підбору за словником – завдання практично нездійсненне.

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

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

Так працюють ключі SSH

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

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

ssh-keygen -t rsa

Згенеровані ключі будуть збережені у файлах  ~/.ssh/id_rsa.pub та ~/.ssh/id_rsa.

Однак, у нашому прикладі ми використовуємо програму PuTTY Key Generator, яка використовує свій формат зберігання приватного ключа (в разі необхідності він легко конвертується). Вказавши внизу, у правому нижньому куті вікна, довжину ключа, а також алгоритм шифрування, натискаємо Generate та чекаємо, паралельно рухаючи мишею, щоб створити «випадковість» для ключа. Публічний ключ відображається одразу, його можна копіювати через буфер обміну.

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

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

На сервері необхідно переміститися в домашню папку користувача та створити там папку .SSH:

ujin@ubuntu:~$ mkdir .ssh

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

ujin@ubuntu:~$ chmod 700 .ssh
ujin@ubuntu:~$ vim .ssh/autorized_keys

 

Після чого копіюємо вміст ключа через буфер обміну. Потім ми маємо виправити права на читання створеного файлу:
ujin@ubuntu:~$ chmod 600 .ssh/autorized_keys

Тепер машина готова до прийому нашого приватного ключа як механізму авторизації.

Висновок

Основна перевага SSH – простота, безпека та універсальність віддаленого доступу. У той час, як графічний інтерфейс автоматизувати досить проблематично, з віддаленим командним рядком це зробити досить просто. Завдяки використанню ключів протокол надійно захищає дані, забезпечуючи високий рівень безпеки. Для тих, кому цікава дана тема, рекомендуємо подивитися відео нижче в якому розповідається, як налаштувати доступ до сайту по SSH і працювати з командного рядка https://youtu.be/Ms-xEJzZahk

Останні статті

Більше 8 млрд грн податків. Стільки сплатили резиденти Дія.City в І кварталі 2025 року

Резиденти Дія.City сплатили до бюджету понад 8 млрд грн податків в І кварталі 2025 року.…

18.04.2025

Китайських офісних працівників закликають менше працювати. Це має допомогти місцевій економіці

У Китаї закликають офісних працівників не працювати надто багато — держава сподівається, що вільний час…

18.04.2025

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

Експерти звертають увагу на тривожну тенденцію: люди все частіше використовують ChatGPT, щоб визначити місцезнаходження, зображене…

18.04.2025

Середовище розробки IntelliJ IDEA оновлено до версії 2025.1

Компанія JetBrains випустила нову версію мультимовного середовища розробки IntelliJ IDEA 2025.1. Оновлена IDE отримала численні…

18.04.2025

Discord впроваджує функцію сканування обличчя для перевірки віку користувачів

Платформа обміну миттєвими повідомленнями Discord впроваджує функцію перевірки віку за допомогою сканування обличчя. Зараз вона…

18.04.2025

Wikipedia випустила спеціальний датасет, щоб відволікти увагу ботів

Wikipedia намагається захистити себе від тисяч різноманітних ботів-скрейперів, які сканують дані цієї платформи для навчання…

18.04.2025