Що таке протокол 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
Тунелювання
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
Favbet Tech – це ІТ-компанія зі 100% українською ДНК, що створює досконалі сервіси для iGaming і Betting з використанням передових технологій та надає доступ до них. Favbet Tech розробляє інноваційне програмне забезпечення через складну багатокомпонентну платформу, яка здатна витримувати величезні навантаження та створювати унікальний досвід для гравців.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: