Зміст
Хоча протокол 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
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 є кілька клієнтів:
Xshell
Інтерфейс Pytty
Важливим елементом безпеки SSH є генерація унікального відбитка fingerprint при кожній установці Open SSH сервера. Це дозволяє ідентифікувати сервер та захиститися від його заміни. Наприклад, коли сервер фізично вимкнений, хтось може взяти його IP-адресу, прослухати всі підключення і отримати всі паролі. У цьому ж випадку ви отримуєте попередження про те, що автентифікація fingerprint порушена. Важливим елементом безпеки SSH є генерація унікального відбитка fingerprint при кожній установці Open SSH сервера. Це дозволяє ідентифікувати сервер та захиститися від його заміни. Наприклад, коли фізично сервер вимкнений, хтось може взяти його IP-адресу, прослухати всі підключення і отримати всі паролі. У цьому ж випадку ви отримуєте попередження про те, що автентифікація fingerprint порушена.
Для максимальної безпеки зазвичай прийнято відмовлятися від паролів та використовувати практику ключів. Її суть полягає в тому, що генерується два ключі, один із яких є приватним, він зберігається лише у вас, а другий ключ – публічний. Оскільки другий ключ не становить цінності без першої частини, його можна публікувати та передавати. Якщо хтось хоче зашифрувати дані, він використовує публічний ключ. При цьому навіть той, хто зашифрував інформацію, відкрити її без приватного ключа не зможе. Також це використовується і у зворотньому напрямі – для гарантування цифрового підпису. Людина може зашифрувати дані, використовуючи свій приватний ключ – будь-який користувач зможе розшифрувати дані, користуючись публічним ключем. Таким чином можна переконатися, що відправник секретної інформації володіє другою частиною ключа, що гарантує цифровий підпис.
Використання ключів має низку переваг, пов’язаних з безпекою. Насамперед їх досить важко зламати. При достатній довжині ключа зламати його методом перебору (атака методом брутфорс) або методом підбору за словником – завдання практично нездійсненне.
По-друге, під час використання ключів на сервері не зберігається жодної приватної інформації. При використанні пароля, наприклад, на сервері залишається парольний хеш, який, у разі доступу до зловмисників, є потенційною загрозою безпеці.
Крім того, використання ключів дає низку додаткових переваг. Наприклад, у звичайному випадку, коли створюється обліковий запис на сервері, генерується тимчасовий пароль, який необхідно змінювати при першій авторизації. Відповідно цей тимчасовий пароль потрібно якось передавати, що з міркувань безпеки є не дуже добре. З ключами все набагато простіше – ви передаєте свій публічний ключ, його прописують на потрібні сервери. При цьому є можливість призначити кілька ключів одному користувачеві. Це набагато зручніше та безпечніше, ніж при використанні паролів.
Процедура генерації пари ключів є досить простою. Її можна виконати за допомогою консольної команди ssh-keygen, яку підтримують усі SSH-клієнти.
ssh-keygen -t rsa
Згенеровані ключі будуть збережені у файлах ~/.ssh/id_rsa.pub та ~/.ssh/id_rsa.
Однак, у нашому прикладі ми використовуємо програму PuTTY Key Generator, яка використовує свій формат зберігання приватного ключа (в разі необхідності він легко конвертується). Вказавши внизу, у правому нижньому куті вікна, довжину ключа, а також алгоритм шифрування, натискаємо Generate та чекаємо, паралельно рухаючи мишею, щоб створити «випадковість» для ключа. Публічний ключ відображається одразу, його можна копіювати через буфер обміну.
Для того, щоб отримати приватний ключ, ми спочатку повинні ввести пароль (дана процедура не є обов’язковою, але рекомендується з метою безпеки). До кожного ключа можна призначити свій коментар, наприклад, вказати ім’я користувача, щоб було зрозуміло чий він. Тепер нам потрібно прописати наш публічний ключ на сервер.
На сервері необхідно переміститися в домашню папку користувача та створити там папку .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
Резиденти Дія.City сплатили до бюджету понад 8 млрд грн податків в І кварталі 2025 року.…
У Китаї закликають офісних працівників не працювати надто багато — держава сподівається, що вільний час…
Експерти звертають увагу на тривожну тенденцію: люди все частіше використовують ChatGPT, щоб визначити місцезнаходження, зображене…
Компанія JetBrains випустила нову версію мультимовного середовища розробки IntelliJ IDEA 2025.1. Оновлена IDE отримала численні…
Платформа обміну миттєвими повідомленнями Discord впроваджує функцію перевірки віку за допомогою сканування обличчя. Зараз вона…
Wikipedia намагається захистити себе від тисяч різноманітних ботів-скрейперів, які сканують дані цієї платформи для навчання…