SSH-протокол (Secure Shell) використовується для безпечного віддаленого управління операційною системою. Щоб забезпечити SSH доступ користувачеві необхідні SSH-клієнт та SSH-сервер. Кожна операційна система має власний набір програм, що забезпечують з’єднання. Так, для Linux це lsh (server та client), openssh (server та client). Для Mac OS найчастіше використовується Nifty Telnet SSH. А в ОС Windows для реалізації з’єднання через SSH протокол найчастіше використовується додаток PuTTY <https://www.putty.org/” https://www.putty. org. Щоб підключитися до віддаленої системи за допомогою SSH, ми будемо використовувати команду ssh. Коли ми запускаємо SSH-клієнт і говоримо йому з’єднатися з сервером, сервер і клієнт за допомогою криптографічної магії встановлюють захищене з’єднання, яке неможливо зламати або змінити. Підключитися можна з будь-якої операційної системи та навіть з мобільного телефону.
SSH — один із найбезпечніших протоколів для реалізації віддаленого доступу до ПК. Сучасні алгоритми шифрування та широкий вибір інструментів для налаштування протоколу роблять його найпопулярнішим варіантом для віддаленого адміністрування комп’ютерів та безпечної передачі даних. Все, що можна було б робити, якби ви сиділи за комп’ютером, відкривши командний рядок, можа зробити за допомогою SSH. Саме за це SSH і люблять: лаконічний та зрозумілий інтерфейс, простота роботи та повна безпека при грамотному налаштуванні. Головне, уважно прочитати статтю та розібратися в налаштуваннях. Адже ми підібрали всі можливі підключення по SSH, конфігураційні файли та опції командного рядка в одному місці.
Вам потрібно встановити пакет ssh (містить клієнт та сервер SSH). На Debian і похідних є окремий пакет із клієнтом ssh-client — достатньо встановити лише його або пакет ssh.
Для Windows є клієнти SSH, наприклад, PuTTY. Але це лише клієнт, без додаткових можливостей – наприклад, з PuTTY не вдасться створити ключі для входу на SSH без пароля. Тому я віддаю перевагу і рекомендую Cygwin. Ця програма містить повнофункціональну версію SSH, у тому числі ви без проблем зможете створювати ключі та виконувати інші типові для SSH дії. За своєю суттю Cygwin реалізує багато можливостей командного рядка Linux.
Є велика кількість безкоштовних програм для підключення до SSH – пошукайте в магазині програм «ssh client». Вони відрізняються можливостями: підтримкою роботи з ключами, можливість переходити в ландшафтний режим, зручність доступу до спеціальних клавіш і т. д. – просто виберіть будь-який з них, який вам більше подобається. На цьому скріншоті я з телефону підключився до настільного комп’ютера SSH і запустив програму моніторингу Wi-Fi мереж. Тобто я можу керувати системою Linux та спостерігати за результатами роботи програм із телефону.
Клієнт SSH на Linux це утиліта командного рядка, тому для введення команд потрібно відкрити консоль. А користувачам Windows команди для підключення до сервера SSH потрібно вводити в Cygwin. Все, що вміщено у квадратні дужки, є необов’язковим.
Як АДРЕСАТ потрібно вказати IP до якого потрібно підключитися або ім’я хоста. Оскільки користувач не вказаний, клієнт SSH як ім’я користувача підставить ім’я користувача в поточній сесії.
Типова команда для підключення виглядає так:
В якості КОРИСТУВАЧА потрібно вказати ім’я користувача на віддаленій системі, до якої виконується підключення. У процесі підключення для цього користувача потрібно буде підтвердити свою особу за допомогою пароля або ключа. Якщо команда не вказана, то буде відкритий звичайний інтерактивний шелл до віддаленої системи. Якщо команда вказана, то при успішному підключенні вона буде виконана, а інтерактивний шелл відкритий не буде, ssh завершить свою роботу після виконання команди.
Також можна вказати URI наступного формату:
Зверніть увагу, після “:”можна вказати порт для команди виду:
При першому підключенні SSH виведе інформацію із запитом:
Перший рядок повідомляє нам, що програма не може встановити з’єднання з цим хостом, але не треба поспішати засмучуватися. У другому рядку нам показують унікальний відбиток віддаленого хоста та запитують, чи хочемо ми до нього підключитися? Набираємо: yes
Далі з’являється повідомлення, що хост додано до списку відомих хостів:
Під час наступного підключення повідомлення не відображатиметься. Ця процедура – попередження про підключення до нових хостів – є надійним захистом від спуфінгу (підміни) IP адрес при підключенні: якщо ви підключаєтеся до одного й того ж хоста, то це повідомлення більше не повинно з’являтися. Якщо це повідомлення з’явилося знову, це означає, що відбувається підключення до якогось іншого хоста! Щоб закінчити сесію (вимкнутись), наберіть exit або натисніть Ctrl+D.
У мене є VPS, яка має IP адресу 185.117.153.79, щоб підключитися до неї я виконую команду:
Але весь час тримати в умі IP адресу незручно, особливо якщо кілька серверів. Було б зручніше, підключатися до хоста по імені, що легко запам’ятовується. Це IP адреса сервера SuIP, тому як коротке ім’я я виберу suip, а як ще більш короткий псевдонім просто букву s. Щоб операційна система почала пізнавати ці імена, потрібно налаштувати файл hosts. У Windows цей файл розміщений шляхом C:WindowsSystem32driversetchosts, а в операційній системі Linux це файл /etc/hosts.
Отже, потрібно додати записи виду:
Для свого прикладу додаємо такий рядок:
VPN, тобто віртуальна приватна мережа, складається з підключених до неї хостів, які можуть бути розкидані по всьому світу, але завдяки VPN об’єднані в одну локальну мережу, всередині якої кожен вузол може зв’язуватися з іншим за локальною IP адресою. Причому з’єднання надійно зашифровані і сторонні особи не зможуть дізнатися, який трафік передається всередині VPN. Припустимо, я хочу підключитися SSH до комп’ютера, який знаходиться в VPN до якої я також підключений. У цьому випадку я можу підключитися вказавши IP комп’ютера, що цікавить мене, в VPN мережі.
Наприклад:
Крім відкриття сесії шелла на віддаленій системі, ssh також дозволяє виконувати окремі команди на віддаленій системі:
Наприклад, для виконання команди tree на віддаленому хості з IP адресою 192.168.1.36 та відображенням результатів на локальній системі, потрібно зробити так:
Використовуючи цю техніку, можна робити цікаві речі, такі як виконання команди ls на віддаленій системі і перенаправлення виведення в файл на локальній системі:
Зверніть увагу на одиночні лапки у вищенаведеній команді. Це зроблено тому, що ми не хочемо, щоб розкриття колії було виконано на локальній машині; оскільки нам потрібне це виконання на віддаленій системі. Також якщо ми хочемо стандартний висновок перенаправити файл на віддаленій машині, ми можемо помістити оператор редиректу та ім’я файлу всередині одиночних лапок:
Не менш цікавий варіант виконання команд буде наведений трохи нижче:
Команда cat терміново зчитує та відображає вміст файлу .ssh/id_rsa.pub, розташованого на локальній машині. | (труба) передає те, що мало б з’явитися у стандартному висновку, іншій команді. Замість команди, яка мала б обробляти рядки, що передаються їй, відбувається з’єднання до віддаленої системи (ssh [email protected]). На віддалену систему приходять рядки, для яких передбачено команду cat >> .ssh/authorized_keys. Тобто. вміст стандартного виводу записується у файл .ssh/authorized_keys, що знаходиться на віддаленій машині.
У клієнта SSH багато опцій командного рядка, але вони переважно призначені для перенаправлення трафіку і просунутих випадків використання SSH. У цій частині розглянемо лише деякі з найчастіше затребуваних опцій.
Опції командного рядка
Файл зі специфічними для користувача налаштуваннями ~/.ssh/config
Файл із загальносистемними налаштуваннями /etc/ssh/ssh_config
Усі значення конфігурації змінюються лише за першої їх установки. Таким чином, спеціальні налаштування хоста повинні бути на початку, а значення за промовчанням наприкінці. Конфігураційний файл клієнта SSH підтримує безліч директив, але їх налаштування потрібне для просунутого використання SSH і для більшості випадків використання будь-яких налаштувань не потрібно. Необхідно відзначити спеціальні директиви Host і Match, які розбивають файл на блоки. Директива Host встановлює ім’я хоста, до якого застосовуються всі наступні налаштування, доки не зустрінеться інша директива Host або Match. Якщо в якості хоста вказати ‘*’, це дозволяє задати глобальні налаштування значень за умовчанням, застосовні до всіх хостів. Шаблон може мати протилежне значення, якщо перед ним поставити знак оклику (‘!’). Якщо запис із запереченням відповідає, то пункт Host ігнорується, якщо не відбудеться збіг з іншими шаблонами. Отже, збіги з запереченнями корисні для забезпечення винятків із збігів за символами підстановки.
Далі показаний невеликий фрагмент конфігурації, в якій для хоста 10.6.0.1 встановлюється порт підключення 55455, для хоста 192.0.100.8 як порт підключення буде використаний 2222, а для всіх інших хостів буде виконано підключення до порту 22:
Ці файли конфігурації містять пари «ключове слово — аргумент», одна пара на одному рядку. Опціонально аргументи можна укласти в подвійні лапки (“), щоб передати аргументи, що містять прогалини. Ключові слова не чутливі до регістру, а аргументи чутливі до регістру. Багато директив закоментовані, але вони вказують на значення за умовчанням, яке все одно використовується. Якщо вас влаштовує значення за промовчанням, то нічого не потрібно змінювати. Якщо ж ви хочете інше значення, потрібно розкоментувати рядок з відповідною директивою (прибрати символ #) і внести зміни. Параметри конфігурації можуть бути розділені пробілами або необов’язковими пробілами і одно ‘=’; останній формат корисний, щоб уникнути необхідності укладати значення пробілів у лапки при вказівці параметрів конфігурації з використанням параметрів ssh, scp і sftp -o. Оскільки для кожного параметра використовується перше отримане значення, спочатку файлу повинні бути наведені більш специфічні для хоста оголошення, а в кінці загальні значення за замовчуванням.
Вище вже розглянуто приклад підключення до віддаленого SSH сервера лаконічного імені замість IP адреси. Це загальносистемне налаштування перетворення імені в IP адресу, в результаті тепер імена suip і s можна використовувати з будь-якою програмою — хоч у веб-браузері, хоч із утилітами, наприклад, з ping:
Але у ssh клієнта є своя власна функціональність задати зручне ім’я хоста, яке добре запам’ятовується. Причому вони дозволяють відразу вказати порт, що з попереднім методом зробити неможливо. Наприклад, IP адреса мого SSH сервера 185.117.153.79, його порт 54321 і я хочу додати можливість підключатися до нього на ім’я Host, тоді файл ~/.ssh/config мені достатньо додати наступне:
Як бачимо, використовується директива HostName — вона встановлює справжнє ім’я хоста, у тому числі можна вказувати адресу IP. Директива Port встановлює порт, який має використовуватися для цього хоста.
За замовчуванням приватний ключ для підключення до SSH береться із файлу ~/.ssh/id_rsa. Якщо потрібно підключитися до SSH сервера з іншим ключем, то використовуйте опцію -i, після якої вкажіть шлях до потрібного файлу з приватним ключем: