SSH (ч.3): Підключення до SSH та налаштування клієнта OpenSSH

4 квітня 2023 2 хвилин Автор: Endpool

Повний посібник з підключення SSH

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 з Linux

Вам потрібно встановити пакет ssh (містить клієнт та сервер SSH). На Debian і похідних є окремий пакет із клієнтом ssh-client — достатньо встановити лише його або пакет ssh.

Підключення до SSH із Windows

Для Windows є клієнти SSH, наприклад, PuTTY. Але це лише клієнт, без додаткових можливостей – наприклад, з PuTTY не вдасться створити ключі для входу на SSH без пароля. Тому я віддаю перевагу і рекомендую Cygwin. Ця програма містить повнофункціональну версію SSH, у тому числі ви без проблем зможете створювати ключі та виконувати інші типові для SSH дії. За своєю суттю Cygwin реалізує багато можливостей командного рядка Linux.

Підключення по SSH з мобільного телефону

Є велика кількість безкоштовних програм для підключення до SSH – пошукайте в магазині програм «ssh client». Вони відрізняються можливостями: підтримкою роботи з ключами, можливість переходити в ландшафтний режим, зручність доступу до спеціальних клавіш і т. д. – просто виберіть будь-який з них, який вам більше подобається. На цьому скріншоті я з телефону підключився до настільного комп’ютера SSH і запустив програму моніторингу Wi-Fi мереж. Тобто я можу керувати системою Linux та спостерігати за результатами роботи програм із телефону.

Як підключитися до SSH

Клієнт SSH на Linux це утиліта командного рядка, тому для введення команд потрібно відкрити консоль. А користувачам Windows команди для підключення до сервера SSH потрібно вводити в Cygwin. Все, що вміщено у квадратні дужки, є необов’язковим.

Команда для підключення має такий вигляд:

В найпростішому варіанті команда для підключення може бути такою:

Як АДРЕСАТ потрібно вказати IP до якого потрібно підключитися або ім’я хоста. Оскільки користувач не вказаний, клієнт SSH як ім’я користувача підставить ім’я користувача в поточній сесії.

Типова команда для підключення виглядає так:

В якості КОРИСТУВАЧА потрібно вказати ім’я користувача на віддаленій системі, до якої виконується підключення. У процесі підключення для цього користувача потрібно буде підтвердити свою особу за допомогою пароля або ключа. Якщо команда не вказана, то буде відкритий звичайний інтерактивний шелл до віддаленої системи. Якщо команда вказана, то при успішному підключенні вона буде виконана, а інтерактивний шелл відкритий не буде, ssh завершить свою роботу після виконання команди.

Також можна вказати URI наступного формату:

Зверніть увагу, після “:”можна вказати порт для команди виду:

При першому підключенні SSH виведе інформацію із запитом:

Перший рядок повідомляє нам, що програма не може встановити з’єднання з цим хостом, але не треба поспішати засмучуватися. У другому рядку нам показують унікальний відбиток віддаленого хоста та запитують, чи хочемо ми до нього підключитися? Набираємо: yes

Приклад підключення.

Далі з’являється повідомлення, що хост додано до списку відомих хостів:

Під час наступного підключення повідомлення не відображатиметься. Ця процедура – ​​попередження про підключення до нових хостів – є надійним захистом від спуфінгу (підміни) IP адрес при підключенні: якщо ви підключаєтеся до одного й того ж хоста, то це повідомлення більше не повинно з’являтися. Якщо це повідомлення з’явилося знову, це означає, що відбувається підключення до якогось іншого хоста! Щоб закінчити сесію (вимкнутись), наберіть exit або натисніть Ctrl+D.

Підключення до SSH на ім’я хоста

У мене є VPS, яка має IP адресу 185.117.153.79, щоб підключитися до неї я виконую команду:

Але весь час тримати в умі IP адресу незручно, особливо якщо кілька серверів. Було б зручніше, підключатися до хоста по імені, що легко запам’ятовується. Це IP адреса сервера SuIP, тому як коротке ім’я я виберу suip, а як ще більш короткий псевдонім просто букву s. Щоб операційна система почала пізнавати ці імена, потрібно налаштувати файл hosts. У Windows цей файл розміщений шляхом C:WindowsSystem32driversetchosts, а в операційній системі Linux це файл /etc/hosts.

Отже, потрібно додати записи виду:

Для свого прикладу  додаємо такий рядок:

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

Або навіть у такому вигляді підключення також пройде успішно:

Підключення SSH до хоста в VPN

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

Наприклад:

Виконання команд на віддаленому сервері без створення сесії Шелла

Крім відкриття сесії шелла на віддаленій системі, ssh також дозволяє виконувати окремі команди на віддаленій системі:

Наприклад, для виконання команди tree на віддаленому хості з IP адресою 192.168.1.36 та відображенням результатів на локальній системі, потрібно зробити так:

Використовуючи цю техніку, можна робити цікаві речі, такі як виконання команди ls на віддаленій системі і перенаправлення виведення в файл на локальній системі:

Зверніть увагу на одиночні лапки у вищенаведеній команді. Це зроблено тому, що ми не хочемо, щоб розкриття колії було виконано на локальній машині; оскільки нам потрібне це виконання на віддаленій системі. Також якщо ми хочемо стандартний висновок перенаправити файл на віддаленій машині, ми можемо помістити оператор редиректу та ім’я файлу всередині одиночних лапок:

Передача стандартного виведення з локальної машини на віддалену по ssh

Не менш цікавий варіант виконання команд буде наведений трохи нижче:

Команда cat терміново зчитує та відображає вміст файлу .ssh/id_rsa.pub, розташованого на локальній машині. | (труба) передає те, що мало б з’явитися у стандартному висновку, іншій команді. Замість команди, яка мала б обробляти рядки, що передаються їй, відбувається з’єднання до віддаленої системи (ssh [email protected]). На віддалену систему приходять рядки, для яких передбачено команду cat >> .ssh/authorized_keys. Тобто. вміст стандартного виводу записується у файл .ssh/authorized_keys, що знаходиться на віддаленій машині.

Опції командного рядка SSH

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

  • -p ПОРТ – Встановлює порт, до якого потрібно підключитись на віддаленому сервері SSH. Стандартним портом є 22. Це налаштування можна встановити в конфігураційному файлі персонально для кожного хоста.
  • -E log_file – Додає налагоджувальні логи до файлу log_file замість стандартного виведення помилок.
  • -F configfile – Визначає альтернативний конфігураційний файл на рівні кожного користувача. Якщо командний рядок містить файл конфігурації, системний файл конфігурації (/etc/ssh/ssh_config) буде проігнорований. За промовчанням файл конфігурації на рівні користувача використовується ~/.ssh/config.

Конфігураційні файли SSH

  • /etc/ssh/ssh_config – Загальносистемний файл конфігурації SSH.
  • /etc/ssh/ssh_known_host – Загальносистемний перелік ключів відомих хостів. Цей файл має бути підготовлений системним адміністратором, щоб він містив відкриті ключі хостів усіх комп’ютерів в організації. Цей файл має бути читаним всім.
  • ~/.ssh/ – Ця директива є стандартним розташуванням для сховища конфігурацій та інформації для автентифікацій специфічних для користувачів. Немає вимог зберігати весь вміст цієї директорії в секреті, але рекомендується налаштувати дозволи на читання/запис/виконання так, щоб вони були у користувача, але не були в інших.
  • ~/.ssh/config – Це конфігураційний файл із налаштуваннями кожного користувача. Через можливе зловживання цей файл повинен мати суворі дозволи: читання/запис для користувача та недоступність для запису іншими.
  • ~/.ssh/known_hosts – Містить список ключів хостів, у які входив користувач, але які відсутні в загальносистемному списку ключів відомих хостів.

Конфігураційні директиви файлів /etc/ssh/ssh_config та ~/.ssh/config

Конфігураційні дані обробляються у порядку і мають наступний пріоритет:

  1. Опції командного рядка

  2. Файл зі специфічними для користувача налаштуваннями ~/.ssh/config

  3. Файл із загальносистемними налаштуваннями /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, після якої вкажіть шлях до потрібного файлу з приватним ключем:

Інші статті по темі
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.