В данной статье я затрону работу с протоколом ssh через Zennoposter. Если вам приходится постоянно работать с настройкой серверов, используя клиент Putty, и каждый день вводить одни и те же команды, то теперь Вы сможете легко автоматизировать этот процесс с помощью Zennoposter и библиотеки, которая называется SSH.NET. Как добавлять сторонние библиотеки в Zenno писалось уже ни один раз, но чтобы статья была законченной опишу данный процесс еще раз. В папке с проектом к данной статье Вы найдете библиотеку Renci.SshNet.dll. Данный файл необходимо положить в папку ExternalAssemblies. На моем компьютере путь будет таким: C:\Program Files (x86)\ZennoLab\ZennoPoster Lite\Progs\ExternalAssemblies. Теперь осталась добавить ссылку в GAC и прописать using согласно скриншотам ниже:
Итак, пол дела сделано. Как работать с данной библиотекой будет показано на конкретном примере, а именно, на примере установки панели VESTA. VESTA - бесплатный аналог isp Manager. Для того, чтобы поставить эту панель, необходимо ввести ряд команд,указанных в документации, соединившись с сервером по SSH.
В документации разработчиков указаны следующие команды:
Однако на некоторых хостингах приходится добавлять еще одну команду
Я так понял, что это связано с тем, что на сервере уже стоят какие-то пакеты, а установка весты возможна только на чистый сервер. Вобщем не суть. В любом случае, в своей задаче, вам необходимо точно узнать последовательность команд, которые нужно вводить для установки (настройки) чего-либо.
Вообще работать с библиотекой просто, но возникла одна загвоздка, но об этом позже.
Чтобы начать работать с библиотекой, создается sshClient
Вместо ip и password Вы указываете данные, которые Вам предоставил хостинг.
Теперь, чтобы выполнить команду, просто используем метод CreateCommand и выполняем ее через Execute().
Но дальше возникает небольшая проблема. Дело в том, что после последней команды:
запрашивается подтверждение установки панели: Вы действительно хотите продолжить? [y/n]
И если сделать вот так:
То Zennoposter зависнет, так как будет ждать завершения выполнения этой команды, а завершения команды не произойдет, так как ожидается ввод буковки «y».
Поэтому в таких ситуация используется специальное соединение shellStream. Согласно документации создается оно следующим образом:
Поэтому добавляем последнюю команду для установки Vesta в таком виде:
Я сразу добавил после команды опции --email, --hostname, --password
Иначе придется ввести не только «y», но и последовательно email, password, hostname.
И дальше есть два пути. Первый - определить примерно сколько времени будет выполняться эта команда (в нашем случае сколько будет выполняться команда до возникновения вопроса[y/n]).Очевидно, что это происходит в доли секунды, поэтому можно просто сделать паузу и вводить следующую команду. Поэтому делаем так:
Теперь подтверждаем, что мы действительно хотим установить эту панель. Для этого вводим букву «y»
При этом сервер знает, что эта команда является именно ответом на этот запрос.
Далее идет установка панели, но теперь просто поставить паузу не удастся (т.к. панель устанавливается от 5 до 10 минут) и ставить паузу с большим запасом не очень круто. Поэтому используется специальный метод Expect, которому передается регулярка. Т.е. При соединении идет отслеживание ответов от сервера. Когда панель установится, то в конце будут слова с поздравлениями. Я просто взял какую-то строчку как регулярное выражение. Т.е. Я указал, что как только данная строчка появится в ответе от сервера, то можно переходить к следующей команде.
Также вторым аргументом идет тайм-аут (время, через которое стоит прекратить дожидаться указанной строки). Т.к. разработчики указывают, что панель может устанавливаться до 15 минут, то я и указал это время (хотя на практике веста устанавливается за 5-10 минут).
Панель установилось, а значит соединение можно закрывать.
Если все прошло успешно, то по адресу https://ip:8083/ будет форма авторизации.
Теперь давайте на базе сервера с панелью Vesta настроим SMTP сервер и на полном автомате создадим неограниченное количество почтовых ящиков.
Для этого воспользуемся api, который предоставили нам разработчики. Как только мы поставили панель, то у нас уже добавлен домен (который был указан в опции --hostname), а также пароль администратора (который был указан в опции —-password). Для доступа к api необходимо указывать имя администратора (всегда admin), указанный пароль, команду, и обязательные аргументы для этой команды.
Давайте на конкретном примере. Создадим неограниченное количество почтовых аккаунтов на домене. Запросы для настройки Vesta отправляются по адресу:
https://{-Variable.ip-}:8083/api/
где {-Variable.ip-} - ip адрес вашего сервера.
Для создания одного ящика используем следующий запрос:
Где {-Variable.user-} - admin
{-Variable.pass-} - пароль администратора
cmd - команда из документации
returncode – возвращать ли числовой код ошибки (вернется 0 — все хорошо=))
{-Variable.prefix-}{-Variable.count-} - это имя почтового ящика. Т.е. Во входных настройках Вы указываете префикс (например info), и далее в цикле, увеличивая {-Variable.count-} вы получаете ящики [email protected], [email protected]и т.д.
{-Variable.pass-} - пароль для создаваемых ящиков
Ну и, как я уже писал, в цикле Вы можете создать неограниченное количество ящиков на домене. Подробнее можете посмотреть в шаблоне для этой статьи.
Ящики есть, теперь надо чтобы все заработало и доставлялось. В панели Vesta для домена на автомате создались DNS записи.
которые просто нужно прописать у регистратора (или туда, куда вы делегировали свой домен). Можно конечно это сделать вручную, но можно опять воспользоваться api vesta + api регистратора.
Чтобы получить все dns записи для домена используем апи запрос:
В ответ вернется текст с dns записями. Далее регулярками расфасовываем данные по переменным и прописываем у регистратора.
Я пользуюсь регистратором reg.ru, у которого есть свой api, и все функции для добавления записей.
Все стандартно, для каждой записи есть своя команда. Чтобы добавить, например, mx запись используется add_mx
Вы также можете создать неограниченное количество поддоменов, и уже на них сколько угодно ящиков (что улучшит доставляемость ваших писем)
Что из себя представляет шаблон к статье.
Шаблон имеет входные настройки. Напротив каждого поля имеются подсказки, что конкретно необходимо ввести.
Т.е. Шаблон последовательно устанавливает панель, добавляет указанное в настройках количество ящиков (с указанным префиксом), и считывает цифровой ключ DKIM для домена.
На выходе получается два файла. В первом (create.txt) будут находится созданные почтовые ящики.
Во втором (dns.txt) – днс записи, которые необходимо прописать у регистратора.
Все почтовые ящики будут с валидными dkim и spf, что является обязательным условием доставляемости для google и yandex.
Ну и еще раз напоминаю, что установка панели на каждом конкретном сервере может немного отличаться, поэтому желательно один раз проделать все руками, и, в случае надобности, подкорректировать команды
Если будет время, постараюсь доработать шаблон в плане автоматического создания поддоменов и прописывания DNS.
Спасибо за внимание =)
Итак, пол дела сделано. Как работать с данной библиотекой будет показано на конкретном примере, а именно, на примере установки панели VESTA. VESTA - бесплатный аналог isp Manager. Для того, чтобы поставить эту панель, необходимо ввести ряд команд,указанных в документации, соединившись с сервером по SSH.
В документации разработчиков указаны следующие команды:
Код:
curl -O http://vestacp.com/pub/vst-install.sh
bash vst-install.sh
Код:
bash vst-install-rhel.sh --force
Вообще работать с библиотекой просто, но возникла одна загвоздка, но об этом позже.
Чтобы начать работать с библиотекой, создается sshClient
Код:
SshClient sshClient = new SshClient("ip", 22, "root", "password");
sshClient.Connect();
Теперь, чтобы выполнить команду, просто используем метод CreateCommand и выполняем ее через Execute().
Код:
var cmd = sshClient.CreateCommand("curl -O http://vestacp.com/pub/vst-install.sh");
cmd.Execute();
cmd = sshClient.CreateCommand("bash vst-install.sh");
cmd.Execute();
Код:
bash vst-install-rhel.sh -–force
И если сделать вот так:
Код:
cmd = sshClient.CreateCommand("bash vst-install-rhel.sh --force");
cmd.Execute();
Поэтому в таких ситуация используется специальное соединение shellStream. Согласно документации создается оно следующим образом:
Код:
IDictionary<Renci.SshNet.Common.TerminalModes, uint> termkvp = new Dictionary<Renci.SshNet.Common.TerminalModes, uint>();
termkvp.Add(Renci.SshNet.Common.TerminalModes.ECHO, 53);
ShellStream shellStream = sshClient.CreateShellStream("xterm", 80,24, 800, 600, 1024, termkvp);
Код:
shellStream.WriteLine("bash vst-install-rhel.sh --force --email [email protected] --hostname domen.ru --password pass");
Иначе придется ввести не только «y», но и последовательно email, password, hostname.
И дальше есть два пути. Первый - определить примерно сколько времени будет выполняться эта команда (в нашем случае сколько будет выполняться команда до возникновения вопроса[y/n]).Очевидно, что это происходит в доли секунды, поэтому можно просто сделать паузу и вводить следующую команду. Поэтому делаем так:
Код:
System.Threading.Thread.Sleep(3000);
При этом сервер знает, что эта команда является именно ответом на этот запрос.
Код:
shellStream.WriteLine("y");
Код:
shellStream.Expect(new Regex(@"Sincerely yours"), new TimeSpan(0, 15, 0));
Панель установилось, а значит соединение можно закрывать.
Код:
sshClient.Disconnect();
Теперь давайте на базе сервера с панелью Vesta настроим SMTP сервер и на полном автомате создадим неограниченное количество почтовых ящиков.
Для этого воспользуемся api, который предоставили нам разработчики. Как только мы поставили панель, то у нас уже добавлен домен (который был указан в опции --hostname), а также пароль администратора (который был указан в опции —-password). Для доступа к api необходимо указывать имя администратора (всегда admin), указанный пароль, команду, и обязательные аргументы для этой команды.
Давайте на конкретном примере. Создадим неограниченное количество почтовых аккаунтов на домене. Запросы для настройки Vesta отправляются по адресу:
https://{-Variable.ip-}:8083/api/
где {-Variable.ip-} - ip адрес вашего сервера.
Для создания одного ящика используем следующий запрос:
Код:
user={-Variable.user-}&password={-Variable.pass-}&returncode=yes&cmd=v-add-mail-account&arg1={-Variable.user-}&arg2={-Variable.domen-}&arg3={-Variable.prefix-}{-Variable.count-}&arg4={-Variable.passemail-}
{-Variable.pass-} - пароль администратора
cmd - команда из документации
returncode – возвращать ли числовой код ошибки (вернется 0 — все хорошо=))
{-Variable.prefix-}{-Variable.count-} - это имя почтового ящика. Т.е. Во входных настройках Вы указываете префикс (например info), и далее в цикле, увеличивая {-Variable.count-} вы получаете ящики [email protected], [email protected]и т.д.
{-Variable.pass-} - пароль для создаваемых ящиков
Ну и, как я уже писал, в цикле Вы можете создать неограниченное количество ящиков на домене. Подробнее можете посмотреть в шаблоне для этой статьи.
Ящики есть, теперь надо чтобы все заработало и доставлялось. В панели Vesta для домена на автомате создались DNS записи.
которые просто нужно прописать у регистратора (или туда, куда вы делегировали свой домен). Можно конечно это сделать вручную, но можно опять воспользоваться api vesta + api регистратора.
Чтобы получить все dns записи для домена используем апи запрос:
Код:
user=admin&password=pass&cmd=v-list-dns-records&arg1=admin&arg2=hostname
Я пользуюсь регистратором reg.ru, у которого есть свой api, и все функции для добавления записей.
Все стандартно, для каждой записи есть своя команда. Чтобы добавить, например, mx запись используется add_mx
Вы также можете создать неограниченное количество поддоменов, и уже на них сколько угодно ящиков (что улучшит доставляемость ваших писем)
Что из себя представляет шаблон к статье.
Шаблон имеет входные настройки. Напротив каждого поля имеются подсказки, что конкретно необходимо ввести.
Т.е. Шаблон последовательно устанавливает панель, добавляет указанное в настройках количество ящиков (с указанным префиксом), и считывает цифровой ключ DKIM для домена.
На выходе получается два файла. В первом (create.txt) будут находится созданные почтовые ящики.
Во втором (dns.txt) – днс записи, которые необходимо прописать у регистратора.
Все почтовые ящики будут с валидными dkim и spf, что является обязательным условием доставляемости для google и yandex.
Ну и еще раз напоминаю, что установка панели на каждом конкретном сервере может немного отличаться, поэтому желательно один раз проделать все руками, и, в случае надобности, подкорректировать команды
Если будет время, постараюсь доработать шаблон в плане автоматического создания поддоменов и прописывания DNS.
Спасибо за внимание =)
- Тема статьи
- Нестандартные хаки
- Номер конкурса статей
- Четвертый конкурс статей
Вложения
-
28,8 КБ Просмотры: 8 000
-
34,4 КБ Просмотры: 7 867
-
33,7 КБ Просмотры: 7 589
-
28,3 КБ Просмотры: 7 727
-
20,3 КБ Просмотры: 7 670
-
6,5 КБ Просмотры: 7 601
-
15,3 КБ Просмотры: 7 651
-
187,3 КБ Просмотры: 1 563
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.