SSH (ч.6): Підказки та складні випадки використання OpenSSH

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

Тунелювання з SSH. Відкриття графічної програми, розташованої на віддаленому комп’ютері, SSH

Ситуація, коли потрібний терміновий доступ до домашнього комп’ютера або внутрішньої корпоративної мережі, знайома кожному. На жаль, якість та безпека громадських мереж часто залишають бажати кращого. Важливу інформацію по таких мережах краще не передавати. Крім того, для організації доступу часто потрібне зовнішнє ПЗ. Для системного адміністрування існує спосіб використання публічних мереж і при цьому створення безпечного підключення до необхідних вузлів без використання того ж VPN. Мова про SSH-тунелювання. Тунель SSH — це тунель, що створюється за допомогою SSH з’єднання і використовується для шифрування тунельованих даних. Використовується для того, щоб убезпечити передачу даних в Інтернеті. Особливість полягає в тому, що незашифрований трафік будь-якого протоколу шифрується на одному кінці SSH з’єднання та розшифровується на іншому.

 У рамках SSH-тунелювання встановлюється з’єднання між клієнтом та сервером, воно зашифровується і тим самим дозволяє захистити конфіденційність та цілісність даних. Для наступного фокусу потрібно два комп’ютери із системою Linux. На жаль, навіть Cygwin із цим трюком не справляється. Причому обидва Linux’а повинні бути з графічним інтерфейсом користувача. Серед іншого, що відбувається коли встановлюється з’єднання з віддаленим хостом через SSH, це створення зашифрованого тунелю, який утворюється між локальною та віддаленою системами. Зазвичай цей тунель використовується для того, щоб набрані на локальній машині команди безпечно були передані дистанційній машині, а результат, також безпечно, надісланий назад. На додаток до цієї базової функції, протокол SSH дозволяє переправляти більшість типів трафіку зашифрованим тунелем, створюючи деякого роду VPN (віртуальну приватну мережу) між локальною та віддаленою системами. Мабуть найчастіше використовувана з цих функцій це можливість транслювати трафік систем X Window. На системі з запущеним X сервером (це машини, які мають графічний інтерфейс користувача) можливо запустити програму X клієнта (графічний додаток) на віддаленій системі і бачити результати її роботи на локальній системі. Зробити це легко. Наприклад, я хочу підключитися до віддаленого хоста АДРЕСАТ і на ньому хочу запустити програму КОМАНДА. При цьому бачити графічне виведення цієї програми я зможу на локальному комп’ютері.

Тунелювання з SSH

Робиться це так:

Реальний приклад:

Приклад графічного виведення.

Тобто SSH запускається із ключем -X. А потім просто запускається програма. Я в Arch Linux. Я успішно логінюся до віддаленого комп’ютера SSH. Після цього я запустив програму recon-ng. Цієї програми навіть немає на Arch Linux, але вона точно є в Kali Linux, до якої я підключився. Результат роботи цієї програми я можу бачити на екрані так, ніби програма запущена локально. Але, повторюся, я хочу, щоб ви це зрозуміли, запущеної програми recon-ng на локальному комп’ютері немає. Якщо я захочу зберегти результат роботи recon-ng (або будь-якої іншої програми, відкритої таким чином), то виявиться, що вона працює в оточенні віддаленого комп’ютера, бачить його файлову систему і т.д. Це зручно, коли ви хочете налаштувати віддалений комп’ютер використовуючи графічний інтерфейс. На деяких системах для цього “фокусу” потрібно використовувати опцію “-Y” замість “-X”.

Як редагувати файл на іншому комп’ютері через ssh

Коли потрібно відредагувати файл, розміщений на віддаленому хості, було б чудово, якби можна було відредагувати його локально так, ніби це локальний файл. Звичайно, можна підняти NFS через тунель ssh для досягнення цього, але це було б занадто зайвим для використання один раз. Звідси запитання: чи є спосіб відредагувати через ssh файл на іншому комп’ютері? Ось коли vim (скорочення від Vi IMproved – покращений Vi) може допомогти. vim можна розглядати як «vi на стероїдах», з функціями, що розширюються, які здорово покращують дефолтне оточення редактора vi. Розширюваність vim досягається завдяки використанню «плагінів». Один з таких плагінів – це netrw, який задіює читання та запис файлів по мережі. netrw підтримує різні протоколи рівня додатків, включаючи ftp, http, scp, rsync та rcp.

Diff – це утиліта командного рядка, яка порівнює вміст двох файлів (або директорій) і рядково показує, у чому вони різняться. Дуже просто користуватися diff, коли обидва файли розміщені на локальному хості. А як бути якщо (один або обидва) вхідні файли розміщені на віддаленому хості? Ви можете використовувати SSH для порівняння цих файлів через мережу. Тут як застосувати команду diff до віддалених файлів SSH. Утиліта diff може приймати один операнд у формі stdin (стандартного введення) (представляється як “-“), і ви можете використовувати цю особливість для досягнення мети застосування diff через SSH наступним чином: ssh КОРИСТУВАЧ@ВИДАЛЕНИЙ_ХОСТcat remote_file.txt” | diff – local_file.txt Вищенаведена команда запросить SSH пароль для віддаленого хоста. Після коректного введення пароля команда прочитає вміст віддаленого файлу через SSH а потім передасть його по трубі в утиліту diff для порівняння з локальним файлом. Інший метод для порівняння вмісту файлу SSH – це ясне використання перенаправлення введення. Щоб використовувати цей другий метод ви повинні спочатку включити бездротовий вхід по ssh у віддалений хост(и). Маючи на увазі, що це готово, ви можете робити наступне:

Якщо ви хочете відредагувати віддалений файл через ssh за допомогою vim, ви можете зробити так:

Реальний приклад команди:

Зверніть увагу на подвійний сліш “/” для каталогу root на віддаленому хості. Вищенаведена команда vim відкриє файл, розміщений на віддаленому хості для редагування. За сценою, vim використовує scp для отримання запитаного файлу з віддаленого хоста, розміщує файл /tmp і, нарешті, відкриває його для редагування. Коли ви спробуєте зберегти зміни у файлі, зміни, в першу чергу, будуть застосовані до локальної копії /tmp, яка потім вивантажитися через scp на віддалений хост. Оскільки за сценою мережна передача здійснюється плагіном netrw, ви можете редагувати будь-який віддалений файл транспарентно, використовуючи традиційний інтерфейс vi. Увага, цей фокус не працює в Cygwin – лише у теперішньому Linux.

Як порівняти файли на віддаленому комп’ютері (виконати команду diff) через SSH

Для порівняння (diff) локального файлу та віддаленого файлу:

Для порівняння (diff) двох віддалених файлів:

Зверніть увагу, що останні команди зазнають невдачі, якщо віддалені хости вимагатимуть від вас введення пароля SSH для доступу. Також запам’ятайте, що наведене вище перенаправлення введення не підтримується шеллом sh. Використовуйте шелл bash або щось сумісне.

Як налаштувати VNC через ssh

За своєю природою VNC – це не безпечний протокол. Добре відомий ризик безпеки VNC: з’єднання з сервером VNC здійснює мережу через не зашифрований канал. Тобто. будь-хто може стягнути встановлену VNC сесію. Для захисту від VNC сніфінгу, вам слід спробувати додаткові позасмугові механізми шифрування під або над з’єднанням VNC. Один з таких механізмів – це налаштування VNC сесії через тунель SSH. Щоб створити SSH тунель до віддаленого хоста, де запущений VNC сервер, дистанційний хост повинен також мати запущений SSH. Тому спочатку встановіть сервер OpenSSH на віддалений хості (як це зробити розказано в першій частині). Наступним кроком є ​​створення SSH тунелю з локального хоста на віддалений хост. Щоб це зробити, запустіть наступну команду. Тут 5900 це номер порту, який прослуховує віддалений VNC сервер.

Після введення пароля SSH і успішного входу, буде встановлений тунель SSH між 127.0.0.1:5900 і remote_host:5900. Тепер ви можете продовжувати та запустити клієнт VNC на локальному хості. У вашому VNC клієнті з’єднайтеся до 127.0.0.1:5900 замість віддаленого сервера VNC. Тоді трафік VNC буде перенаправлятися через тунель SSH між вами і віддаленим сервером VNC і, отже, він буде убезпечений від перехоплення пакетів.

Як увімкнути форвардинг (пересилання) X11 з використанням ssh

Пересилання X11 — це механізм, який дозволяє графічному інтерфейсу програм X11, запущених на віддаленому сервері Linux, відображатися на локальній клієнтській машині. За сценою, висновок X11 запущеної програми, санкціонований для відправки на локалхост через з’єднання X11 між клієнтом і віддаленим сервером. SSH має опції для безпечного тунелювання таких X11 з’єднань так, що сесія пересилання X11 виходить зашифрована та інкапсульована. Для пересилання X11 не потрібно, щоб на віддалений серверний хост мав повну встановлену систему X11. Проте на серверному хості потрібен щонайменше встановлений xauth. xauth – це утиліта, яка підтримує конфігурацію Xauthority, що використовується сервером та клієнтом для аутентифікації X11 сесій. Для встановлення xauth, зробіть наступне на віддаленому сервері:

Для Debian, Linux Mint, Ubuntu, Kali Linux та їх похідних:

На Arch Linux та похідних:

Потім увімкніть перенаправлення X11 у sshd, додавши у файл /etc/ssh/sshd_config директиву:

Щоб зміни набули чинності, перезапустіть службу sshd. Наведене вище налаштування включить пересилання X11 на всій системі серверного хоста. Якщо замість цього ви бажаєте увімкнути пересилання X11 на основі індивідуального користувача, ви можете використовувати специфічний для кожного користувача конфігураційний файл ssh (наприклад, $HOME/.ssh/config). Таким чином, ви можете використовувати пересилання X11 тільки коли ви запускаєте ssh в конкретному обліковому записі. На відміну від віддаленого серверного хоста, машині з локальним клієнтом потрібна встановлена ​​система X11 для відображення запущеної програми X11. Якщо так, то в цьому випадку ви можете відкрити ssh з’єднання з локальної машини на віддалений сервер наступним чином:

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

Збереження запущеної команди після закриття SSH

Якщо в SSH ви запустили команду, то після відключення від SSH ця команда буде відразу ж зупинена.

Навіть якщо ви перевели її у фон за допомогою &:

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

Мережна файлова система SSHFS

У розділі “SSH (ч.5): Копіювання файлів за допомогою scp і sftp” вже розглянуті способи, за допомогою яких можна копіювати дані з віддаленим сервером. В тому числі показано як інтегрувати доступ до файлів SSH через популярні файлові менеджери. При всій простоті описаних способів, вони мають недолік — він працює лише у додатках, які підтримують протокол SFTP. Є більш універсальний варіант, який є дуже простим. Цей спосіб вимагає встановлення двох додаткових пакетів:

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

  • fuse – FUSE (Filesystem in Userspace), тобто файлова система у просторі користувача. Є інтерфейсом до файлової системи, що дозволяє монтувати файлову систему з правами звичайного користувача.

Встановлення необхідних пакетів у Debian, Linux Mint, Ubuntu, Kali Linux та їх похідних:

Встановлення необхідних пакетів також в Arch Linux, BlackArch та їх похідних (це дуже важливо):

Після встановлення пакетів, створіть папку, куди монтуватиметься віддалена файлова система – це повинна бути папка, до якої у вас є доступ без підвищених привілеїв, наприклад:

Для монтування необхідно запустити команду виду:

Якщо потрібно вказати порт, використовуйте опцію -p в кінці команди. Наприклад, мені потрібно змонтувати директорію /root хоста 185.117.153.79, де я хочу виконати вхід від користувача root; при цьому на локальній системі я хочу виконати монтування до папки Downloads/ssh; на віддаленій системі SSH працює на порту 2222, тоді моя команда буде такою:

Тепер файли папки /root хоста 185.117.153.79 будуть доступні у Downloads/ssh на локальному комп’ютері. Зверніть увагу, що команда sshfs не вимагає sudo. Для автоматизації можна налаштувати вхід на SSH по ключу (без пароля), і зберегти команду монтування з sshfs у файл/скрипт для швидкого підключення.

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