Зачем мне это?
Этот соединитель в основном предназначен для ситуаций, когда системная интеграция требует выполнения команд оболочки в удаленной системе. Примеры:
- Изменения конфигурации (пароли, разрешения, учетные записи и т. Д.)
- Предоставление ресурсов
- Операции с файловой системой на дисках или папках, не связанных с FTP
Вы также можете использовать этот разъем в качестве шлюза безопасности. Предположим, вы системный администратор и отдыхаете в отеле «все включено» на Фиджи. Вы получили срочный звонок от своего босса, в котором говорилось, что возникла проблема, и вам нужно немедленно приступить к ее решению. Вы, вероятно, думаете, что если у вас есть ноутбук или смартфон, вы можете просто войти по SSH на сервер. Но что произойдет, если эта конечная точка SSH доступна только из корпоративного VPN, который недоступен с Фиджи? Используя этот разъем и мощь Mule, вы можете легко создать безопасный шлюз, который предоставляет SSH для внешнего мира в качестве веб-клиента, чат-бота или любого другого протокола, который вам нужен … Облако — это предел!
Что я могу с этим сделать?
Основные характеристики разъема:
- Полнодуплексная связь. По сути, SSH — это двунаправленный полнодуплексный протокол, который означает, что он не является синхронным, как HTTP, где вам нужно отправить сообщение для получения ответа. При использовании SSH удаленный хост может захотеть вам что-то сказать, даже если вы молчали. Этот соединитель использует подход потока обратных вызовов для отделения операции «отправка» от операции «получение».
- Режим Shell: разъем предоставляет дополнительную возможность режима Shell. Если этот параметр включен, соединитель будет поддерживать удаленный сеанс, так что вы сможете выполнять несколько команд и поддерживать контекст, аналогично традиционному клиенту на основе терминала, например PuTTY. Использование режима оболочки действительно показывает мощь поддержки полного дуплекса. Если вы просто хотите выполнить одну команду, вы можете отключить ее и сохранить ресурсы.
- Мультиплексирование подключений. Еще одна особенность SSH заключается в том, что на одном сервере может быть зарегистрировано несколько пользователей. Базовое соединение представлено концепцией сеанса, и каждый пользователь работает по каналу. Этот соединитель полностью скрывает эту сложность для вас, предоставляя аналогичную модель, в которой вы можете иметь несколько пользователей, работающих на одном клиенте.
Я продан! Как мне это использовать?
Во-первых, вам нужно посетить сайт Mule Forge и перейти по руководству по установке по этой ссылке .
Теперь, когда все готово, давайте начнем с добавления пространства имен:
<mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ssh="http://www.mulesoft.org/schema/mule/sshmultiplexedconnector" xsi:schemaLocation=" http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd http://www.mulesoft.org/schema/mule/ssh http://www.mulesoft.org/schema/mule/sshmultiplexedconnector/1.0/mule-sshmultiplexedconnector.xsd">
Теперь мы настраиваем разъем:
<ssh:config host="ssh.mycompany.com" port="22" timeout="6000" callbackFlowName="callback" shellMode="true" />
Как вы можете видеть, конфигурация довольно наглядна и понятна. Это в значительной степени о:
- хозяин
- Порт TCP
- Тайм-аут (в миллисекундах)
- Имя потока обратного вызова (для поддержки полного дуплекса, продолжайте чтение для полного примера)
- Shell Mode: логическое свойство, чтобы включить (или нет) режим оболочки. Мы будем использовать это в этом примере.
Теперь давайте отправим пару команд!
<flow name="exampleFlow"> <ssh:send username="${ssh.user}" password="${ssh.pass}" content="cd test" breakLine="true" /> <ssh:send username="${ssh.user}" password="${ssh.pass}" content="cat helloWorld.txt" breakLine="true"/> </flow>
Итак, этот код выполняет переход к папке с именем test и выводит содержимое файла helloWorld.txt. Поскольку мы используем режим оболочки, вторая команда все еще знает о навигации, выполненной в первой команде, и поэтому может выводить файл. Если режим оболочки отключен, вторая команда не будет выполнена, поскольку местоположение пользователя будет снова установлено в $ HOME.
Теперь, когда мы понимаем, что делает этот поток, давайте подробнее рассмотрим параметры:
- Имя пользователя и пароль: Помимо очевидного, приятной особенностью этих параметров является то, что соединитель будет использовать имя пользователя для мультиплексирования и повторного использования базового канала, связанного с этим именем пользователя.
- Содержание: полезная нагрузка, которую вы хотите передать
- breakLine: этот параметр является необязательным и по умолчанию имеет значение false. Если true, он добавит символ ‘\ n’ в конец содержимого. Это потому, что если вы хотите выполнить команду, удаленной оболочке нужно нажать Enter, чтобы завершить строку. Таким образом, если ваша полезная нагрузка зафиксирована, как в примере, добавление разрыва в конец строки автоматически пригодится. Если вы получаете контент из веб-клиента, канала чата или любого другого источника, который будет содержать разрыв строки, или если он вам просто не нужен, не устанавливайте это значение.
И как мне прочитать ответ? Определение потока обратного вызова, который был указан в конфигурации коннектора:
<flow name="callback"> <logger message="sent to #[header:INBOUND:SSH_CALLBACK_USER], message says: #[payload]" /> </flow>
Об этом потоке нужно помнить две вещи:
- Имя соответствует свойству config callbackFlowName
- Полезная нагрузка сообщения содержит ответ сервера, а входящее свойство SSH_CALLBACK_USER содержит имя пользователя, которому было отправлено сообщение (помните, что соединения являются полнодуплексными и мультиплексированными, поэтому одновременность делает невозможным определение порядка поступления ответов)
Итак, мы почти закончили, последнее, что нужно сделать, это освободить соединение, как только мы закончим, используя его:
<flow name="release"> <ssh:release username="${ssh.user}"/> </flow>
Обратите внимание, что операция освобождения имеет имя пользователя в качестве обязательного параметра. Это связано с тем, что соединитель является мультиплексным, и хотя пользователь A может быть готов освободить некоторые ресурсы, пользователи B и C могут все еще работать.
Это все, ребята! Пожалуйста, посетите MuleForge для получения дополнительной информации и не стесняйтесь поделиться вопросами или мыслями об этом соединителе. Мы с нетерпением ждем ваших отзывов.