Управляем удаленным компьютером с помощью почты и облачного хранилища Dropbox

от автора

Постановка задачи

В этой статье будет рассмотрено пару скриптов для:

  • Управления командной строкой через Dropbox. Скрипт будет проверять указанный файл на сервере, и выполнять команды написанные внутри файла.
  • Управление командной строкой через почту. Один аккаунт почты будет выступать в роли сервера, а другой в роли клиента.

Все написанные скрипты тестировались под управлением Linux Ubuntu 13.04.

Управление командной оболочкой с помощью Dropbox

Заходим на оф. сайт Dropbox’a, качаем клиент и устанавливаем.

Теперь рассмотрим следующий скрипт на Perl:

#!/usr/bin/perl # cmdfile.pl use strict; while (1) { # Запускаем бесконечный цикл   close STDOUT;   open CMDFILE, "commandfile"; # Открываем файл   my @file = <CMDFILE>; # Заливаем файл в массив   unless (@file) {sleep 10;next;} # Если нет файла, спим 10 секунд, и переходим к следующей итерация цикла   close CMDFILE;   system "rm commandfile"; # Удаляем файл, чтобы он его не использовал по кругу   if ($file[0] =~ m/ban log:/) { # Если в начале файла написана строка "ban log", значит не использовать файл логов     shift @file;     # Выполняем все команды из файла     foreach my $cmd(@file) {       system "$cmd";     }   } else { # Использовать файл отчетов     foreach my $cmd(@file) {       # Оформление файла отчетов       open STDOUT, ">>", "log";       print "*" x 80,"\n";       printf "%25s";       system "date\n";       print "Command: $cmd\n";       system "$cmd";     }     close STDOUT;   } } 

Сохраняем скрипт в папку Dropbox, и запускаем его. Теперь когда в этой папку появиться файл «commandfile», скрипт будет выполнять все указанные команды и сохранять отчеты в файл «log». Если нужно отключить отчеты, пишем в начале файла «ban log».

Управление командной оболочкой с помощью почты

Скрипт на Perl:

#!/usr/bin/perl #mail_commander.pl use Mail::POP3Client; while (1) { # Запускаем бесконечный цикл   # Подключаемся к серверу почты   my $pop = new Mail::POP3Client (      USER     => "example\@bk.ru",     PASSWORD => "password",     HOST     => "pop3.mail.ru",     PORT     => "995",     USESSL   => true,   ); # Эти настройки рассчитаны на mail.ru, но для других будет примерно тоже самое   if ($pop->Count() == 0) {sleep 10;next;} # Если нет писем, спим 10 сек. и переходим к следующей итерация цикла   for (my $i = 1; $i <= $pop->Count(); $i++) {          my @body = ();         my @commands = ();         foreach ($pop->Head($i)) { # Читаем заголовки           if (/From:.+<example_2\@gmail.com>/) { # Проверяем отправителя             @body = $pop->Body($i); # Если отправитель совпадает, загружаем тело письма в массив             $pop->Delete($i); # Удаляем письмо             if ($body[3] =~ m/begin:/) { # Письмо должно начинаться cо слова "begin:"               for (my $j = 4; $j <= $#body; $j++) { # Читаем команды                 last if $body[$j] =~ m/end;/; # Письмо должно заканчиваться словом "end;"                 push @commands, $body[$j]; # Загружаем команды в массив                 }                  # Если вторая строчка содержит "ban log", значит не использовать файл отчетов                 if ($commands[0] =~ m/ban log/i) {                   shift @commands;                   close STDOUT;                   foreach my $cmd(@commands) { # Выполняем команды                     system "$cmd";                   }                 } else { # Если использовать отчеты                   open STDOUT, ">>", "log";                    foreach $cmd(@commands) {                   # Оформляем файл, и производим запись отчетов                     print "*" x 80,"\n";                     printf "%25s";                     system "date\n";                     print "Command: $cmd\n";                     system "$cmd";                   }                   close STDOUT;                 }               }             }           }         }       } $pop->Close; 

Теперь сохраняем скрипт в папку Dropbox’a, запускаем. Если отправить письмо с example_2@gmail.com на example@bk.ru, будут выполнены все указанные команды.

Пример письма:

To: example@bk.ru
From: example_2@gmail.com
Subject: CMD
Text:

begin: rm /home/examle.txt touch hello.txt echo Hello, I'am command >> hello.txt end; 

Отчеты будут сохраняться в файл «log», если пропишем после «begin:», «ban log» отчеты не будут сохраняться.

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

ссылка на оригинал статьи http://habrahabr.ru/post/202532/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *