SSH (ч.6): Подсказки и сложные случаи использования OpenSSH

Оглавление

Содержание «Полное руководство по SSH в Linux и Windows»

1. Что такое SSH. Утилиты SSH

2. Настройка сервера OpenSSH

3. Как подключиться к SSH. Настройка клиента OpenSSH

4. Создание и настройка ключей OpenSSH

5. Копирование файлов с помощью scp и sftp

6. Подсказки и сложные случаи использования OpenSSH

6.1 Туннелирование с SSH. Открытие графической программы, расположенной на удалённом компьютере, по SSH

6.2 Использование SSH в качестве прокси для доступа к локальным ресурсам удалённого компьютера

6.3 Установка VPN через SSH

6.4 Как редактировать файл на другом компьютере через ssh

6.5 Как сравнить файлы на удалённом компьютере (выполнить команду diff) через SSH

6.6 Как настроить VNC через ssh

6.7 Как включить форвардинг (пересылку) X11 с использованием ssh

6.8 Сохранение запущенной команды после закрытия SSH

6.9 Сетевая файловая система SSHFS


Туннелирование с SSH. Открытие графической программы, расположенной на удалённом компьютере, по SSH

Для следующего фокуса нужно два компьютера с системой Linux. К сожалению, даже Cygwin с этим трюком не справляется. Причём оба Linux'а должны быть с графическим пользовательским интерфейсом.

Среди всего прочего, что происходит когда устанавливается соединение с удалённым хостом через SSH, это создание зашифрованного туннеля, который образуется между локальной и удалённой системами. Обычно, этот туннель используется для того, чтобы набранные на локальной машине команды безопасно были переданы удалённой машине, а результат, также безопасно, прислан обратно.

В добавок к этой базовой функции, протокол SSH позволяет переправлять большинство типов трафика по зашифрованному туннелю, создавая некого рода VPN (виртуальную частную сеть) между локальной и удалённой системами.

Пожалуй самая часто используемая из этих функций — это возможность транслировать трафик систем X Window. На системе с запущенным X сервером (это машины, которые имеют графический пользовательский интерфейс) возможно запустить программу X клиента (графическое приложение) на удалённой системе и видеть результаты её работы на локальной системе. Сделать это просто. Например, я хочу подключиться к удалённому хосту АДРЕСАТ и на нём я хочу запустить программу КОМАНДА. При этом видеть графический вывод этой программы я смогу на локальном компьютере. Делается это так:

ssh -X АДРЕСАТ
КОМАНДА

Реальный пример:

ssh -X root@192.168.1.123
recon-ng

Т.е. SSH запускается с ключом -X. А затем просто запускается программа.

Я нахожусь в Arch Linux. Я успешно логинюсь к удалённому компьютеру по SSH. После этого я запустил программу recon-ng. Этой программы даже нет на Arch Linux, но она точно есть в Kali Linux, к которой я и подключился. Результат работы этой программы я могу видеть на экране так, будто бы программа запущена локально. Но, повторюсь, я хочу, чтобы вы это поняли, запущенной программы recon-ng на локальном компьютере нет. Если я захочу сохранить результат работы recon-ng (или любой другой программы, открытой таким образом), то окажется, что она работает в окружении удалённого компьютера, видит его файловую систему и т. д. Это удобно, когда вы хотите настроить удалённый компьютер используя графический интерфейс.

На некоторых системах для этого «фокуса» нужно использовать опцию «-Y» вместо опции «-X».

Использование SSH в качестве прокси для доступа к локальным ресурсам удалённого компьютера

Подробности смотрите в разделах:

Установка VPN через SSH

В SSH есть встроенные возможности туннелирования — программа автоматизирует создание туннельных интерфейсов на сервере и клиенте, подробности в этом разделе.

Как редактировать файл на другом компьютере через ssh

Когда нужно отредактировать файл, размещённый на удалённом хосте, было бы здорово, если бы можно было отредактировать его локально так, будто бы это локальный файл. Конечно, можно поднять NFS через ssh туннель для достижения этого, но это было бы слишком излишним для использования один раз. Отсюда вопрос: есть ли способ отредактировать через ssh размещённый на другом компьютере файл?

Вот когда vim (сокращение от "Vi IMproved" — улучшенный Vi) может помочь. vim можно рассматривать как «vi на стероидах», с расширяемыми функциями, которые здорово улучшают дефолтное окружение редактора vi. Расширяемость vim достигается благодаря использованию «плагинов». Один из таких плагинов — это netrw, который задействует чтение и запись файлов по сети. netrw поддерживает различные протоколы уровня приложений, включая ftp, http, scp, rsync и rcp.

Если вы хотите отредактировать удалённый файл через ssh с использованием vim, вы можете сделать так.

sudo apt install vim
vim scp://ПОЛЬЗОВАТЕЛЬ@УДАЛЁННЫЙ_ХОСТ//home/user/path/file

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

vim scp://root@192.168.1.123//root/prs.txt

Обратите внимание на двойной слеш "/" для каталога root на удалённом хосте. Вышеприведённая команда vim откроет файл, размещённый на удалённом хосте для редактирования. За сценой, vim использует scp для получения запрошенного файла с удалённого хоста, размещает файл в /tmp и, наконец, открывает его для редактирования.

Когда вы попытаетесь сохранить изменения в файле, изменения, в первую очередь, будут применены к локальной копии в /tmp, которая затем выгрузиться через scp на удалённый хост.

Поскольку за сценой сетевая передача осуществляется плагином netrw, вы можете редактировать любой удалённый файл транспарентно, используя традиционный интерфейс vi.

Внимание, этот фокус не работает в Cygwin — только в настоящем Linux.

Как сравнить файлы на удалённом компьютере (выполнить команду diff) через SSH

diff — это утилита командной строки, которая сравнивает содержимое двух файлов (или директорий) и построчно показывает в чём они различаются. Очень просто пользоваться diff, когда оба файла размещены на локальном хосте. А как быть если (один или оба) входных файла размещены на удалённом хосте? Вы можете использовать SSH для сравнения этих файлов по сети. Здесь как применить команду diff к удалённым файлам по SSH.

Утилита diff может принимать один операнд в форме stdin (стандартного ввода) (представляется как "-"), и вы можете использовать эту особенность для достижения цели по применению diff через SSH следующим образом.

ssh ПОЛЬЗОВАТЕЛЬ@УДАЛЁННЫЙ_ХОСТ "cat remote_file.txt" | diff — local_file.txt

Вышеприведённая команда запросит у вас SSH пароль для удалённого хоста. После корректного ввода пароля, команда прочитает содержимое удалённого файла через SSH а затем передаст его по трубе в утилиту diff для сравнения с локальным файлом.


Другой метод для сравнения содержимого файла по SSH — это ясное использование перенаправления ввода. Чтобы использовать этот второй метод вы должны для начала включить беспроводной вход по ssh в удалённый хост(ы). Подразумевая что это готово, вы можете делать следующее:

Для сравнения (diff) локального файла и удалённого файла:

diff local_file.txt <(ssh user@remote_host 'cat remote_file.txt')

Для сравнения (diff) двух удалённых файлов:

diff <(ssh user@remote_host 'cat remote_file.txt') <(ssh user2@remote_host2 'cat remote_file2.txt')

Обратите внимание, что последние команды потерпят неудачу, если удалённые хосты потребуют от вас ввода пароля SSH для доступа. Также запомните, что вышеприведённое перенаправление ввода не поддерживается шеллом sh. Используйте шелл bash или что-нибудь совместимое.

Как настроить VNC через ssh

По своей природе VNC — это не безопасный протокол. Хорошо известнен риск безопасности VNC: соединение с сервером VNC осуществляет по сети через не зашифрованный канал. Т.е. кто угодно может стащить установленную VNC сессию. Для защиты от VNC сниффинга, вам следует попробовать дополнительные внеполосные механизмы шифрования, под или над соединением VNC.

Один из таких механизмов — это настройка VNC сессии через SSH туннель. В этом уроке я опишу как настроить VNC через SSH на Linux.

Я предполагаю, что у вас уже есть где-то в сети VNC сервер, к которому мы будем коннектится.

Чтобы создать SSH туннель к удалённому хосту, где запущен VNC сервер, удалённый хост должен также иметь запущенный SSH. Поэтому для начала установите сервер OpenSSH на удалённый хости (как это сделать рассказано в первой части).

Следующий шаг — это создание SSH туннеля с локального хоста на удалённый хост. Чтобы это сделать, запустите следующую команду. Здесь 5900 — это номер порта, который прослушивает удалённый VNC сервер.

ssh user@remote_host -L 5900:127.0.0.1:5900

После введение SSH пароля и успешного входа, будет установлен SSH туннель между 127.0.0.1:5900 и remote_host:5900.

Теперь вы можете продолжать и запустить клиент VNC на локальном хосте. В вашем VNC клиенте соединитесь к 127.0.0.1:5900 вместо удалённого VNC сервера. Тогда трафик VNC будет перенаправляться через SSH туннель между вами и удалённым сервером VNC и, следовательно, он будет обезопасен от перехвата пакетов.

gvncviewer 127.0.0.1

Как включить форвардинг (пересылку) X11 с использованием ssh

Пересылка X11 — это механизм, который позволяет графическому интерфейсу программ X11, запущенных на удалённом сервере Linux, быть отображёнными на локальной клиентской машине. За сценой, вывод X11 удалённо запущенной программы, санкционирован для отправки на локалхост через соединение X11 между клиентом и удалённым сервером. SSH имеет опции для безопасного туннелирования таких X11 соединений так, что сессия пересылки X11 получается зашифрована и инкапсулирована. Если вы хотите настроить форвардинг X11 через SSH, то ознакомьтесь с этой инструкцией.

Для пересылки X11, не требуется, чтобы на удалённый серверный хост имел полную установленную систему X11. Тем не менее на серверном хосте нужен как минимум установленный xauth. xauth — это утилита, которая поддерживает конфигурацию Xauthority, используемую сервером и клиентом для аутентификации X11 сессий. Для установки xauth, сделайте следующее на удалённом сервере:

Для Debian, Linux Mint, Ubuntu, Kali Linux и их производных:

sudo apt install xauth

На Arch Linux и производных:

sudo pacman -S xorg-xauth

Затем включите перенаправление X11 в sshd, добавив в файл /etc/ssh/sshd_config директиву:

X11Forwarding yes

Чтобы изменения вступили в силу, перезапустите службу sshd.

Вышеприведённая настройка включит пересылку X11 на всей системе серверного хоста. Если вместо этого вы хотите включить пересылку X11 на основе индивидуального пользователя, вы можете использовать специфичный для каждого пользователя конфигурационный файл ssh (например, $HOME/.ssh/config). Таким образом, вы можете использовать пересылку X11 только когда вы запускаете ssh в конкретном пользовательском аккаунте.

В отличие от удалённого серверного хоста, машине с локальным клиентом нужна установленная система X11 для отображения удалённой запущенной программы X11. Если всё так, то в этом случае вы можете открыть ssh соединения из локальной машины на удалённый сервер следующим образом.

ssh -X ПОЛЬЗОВАТЕЛЬ@УДАЛЁННЫЙ_СЕРВЕР

После входа, вы можете обычным образом запустить любую программу X11 на удалённом сервере, и её вывод будет отображён на локальной клиентской машине.

Сохранение запущенной команды после закрытия SSH

Если в SSH вы запустили команду, то после отключения от SSH, эта команда будет сразу же остановлена. Даже если вы перевели её в фон с помощью &:

КОМАНДА &

Есть разные возможности сделать так, чтобы команда не только продолжила работу после отсоединения от SSH, но и подключиться к этой команде вновь, чтобы просмотреть её вывод, результаты работы. Информацию об этом смотрите в разделе «5 способов сделать так, чтобы программа не останавливалась после отключения SSH».

Сетевая файловая система SSHFS

В разделе «SSH (ч.5): Копирование файлов с помощью scp и sftp» уже рассмотрены способы, с помощью которых можно копировать данные с удалённым сервером. В том числе показано как интегрировать доступ к файлам по SSH через популярные файловые менеджеры. При всей простоте описанных способов, у них есть недостаток — он работает только в приложениях, которые поддерживают протокол SFTP.

Имеется более универсальный вариант, который является также весьма простым. Этот способ требует установки двух дополнительных пакетов:

  • sshfs — позволяет монтировать удалённую файловую систему используя SFTP. Говоря простым языком, файлы удалённого сервера будут как будто бы частью вашей файловой системы. Следовательно, любы приложения смогут с ними работать.
  • fuse — FUSE (Filesystem in Userspace), то есть файловая система в пространстве пользователя. Является интерфейсом к файловой системе, позволяет монтировать файловую систему с правами обычного пользователя.

Установка необходимых пакетов в Debian, Linux Mint, Ubuntu, Kali Linux и их производных:

sudo apt install sshfs fuse

Установка необходимых пакетов в Arch Linux, BlackArch и их производных:

sudo pacman -S sshfs fuse

После установки пакетов, создайте папку, куда будет монтироваться удалённая файловая система — это должна быть папка, к которой у вас есть доступ без повышенных привилегий, к примеру:

mkdir -p Downloads/ssh

Для монтирования нужно запустить команду вида:

sshfs ПОЛЬЗОВАТЕЛЬ@УДАЛЁННЫЙ-ХОСТ:/ДИРЕКТОРИЯ/УДАЛЁННОГО/ХОСТА ТОЧКА-МОНТИРОВАНИЯ.

Если нужно указать порт, то используйте опцию -p в конце команды.

К примеру, мне нужно смонтировать директорию /root хоста 185.117.153.79 где я хочу выполнить вход от пользователя root; при этом на локальной системе я хочу выполнить монтирование в папку Downloads/ssh; на удалённой системе SSH работает на порту 2222, тогда моя команда будет такой:

sshfs root@185.117.153.79:/root Downloads/ssh -p 2222

Теперь файлы папки /root хоста 185.117.153.79 будут доступны в Downloads/ssh на локальном компьютере. Обратите внимание, что команда sshfs не потребовала sudo.

Для автоматизации, можно настроить вход на SSH по ключу (без пароля), и сохранить команду монтирования с sshfs в файл/скрипт для быстрого подключения.

Рекомендуется Вам:

Добавить комментарий

Ваш e-mail не будет опубликован.