LINUX.ORG.RU

Jabber-Shell: администрирование посредством Jabber


0

0

Опубликован бот, позволяющий управлять удалённой системой посредством jabber.

В настоящий момент бот находится в зачаточном состоянии. Однако он уже работает и даже пригоден к использованию. Хотя никто не может гарантировать что с ним не будет проблем.

Бот работает следующим образом: получив сообщение он смотрит на JID отправителя. Если оно отправлено администратором, то полученное сообщение выполняется как команда оболочки (os.system()) с перенаправлением вывода в файл /tmp/jabebr-shell. После завершения выполнения команды, содержимое файла /tmp/jabber-shell отправляется в ответном сообщении администратору.

В настоящий момент есть следующие замечания:

  • Если вывод команды очень большой - он обрезается до четырёх килобайт. В перспективе - разбивать на несколько сообщений.
  • Если послать боту команду clear - он падает.
Что когда-нибудь будет сделано:
  • Ну во-первых проблемы, перечисленные в предыдущем пункте:)
  • Загрузка файлов на удалённую машину и скачивание файлов с неё.
  • Асихнхронная обработка очереди сообщений, чтобы можно было убивать зависшую программу:)
Бот написан на языке python, с использованием библиотеки xmpppy.

>>> Страница бота

Ответ на: комментарий от ergil

> Пока говорил ему мелочи типа uptime, who, whoami и прочее все работало, а вот стоило сказать emerge -vp gnome... Он в /tmp/jabber-shell вывод команды-то показал, но отправить не осилил, упал.

Отключи колёр. Он поэтому падает...

MooSE ★★★★
() автор топика

Хочу такого бота! Только без кучи зависимостей или со включенными в пакет зависимостями.

Знакомые достали, как сделать то, как сделать это... Вот я бы им такого бота вручил и всё в консоли сделал...

Но с такими зависимостями я запарюсь рассказывать как бота запустить!

anonymous
()
Ответ на: комментарий от MooSE

>Скорость на порту резать начинают. А так - скорость режется чуть дальше чем на порту и не на всё.

Бегите от этих пе... :)

FiXer ★★☆☆☆
()
Ответ на: комментарий от MooSE

Убрал колор, не помогло, все равно падает...

ergil ★★★
()
Ответ на: комментарий от catap

> Так же можно ловить ошибку в самом боте и сразу рестарт делать, а не ждать 60 секунд во внешнем скрипте

> Уф, вроде всё. В целом, наверное удобно что бы смотреть не грохнулись ли сервера или как.

Если поправишь всё что написал и вышлешь мне патч - скажу большое спасибо.

MooSE ★★★★
() автор топика
Ответ на: комментарий от anonymous

Да вообще-то и зависимостей-то не так уж и много. Практически всё есть в дефолтной поставке любого дистрибутива...

MooSE ★★★★
() автор топика

Арендуем сервер без NAT(no-nat.ru).

С компьютера к которому нужен доступ: ssh -R 9999:localhost:22 no-nat.ru

С любого компьютера заходим на no-nat.ru: ssh no-nat.ru. Находясь на no-nat.ru: ssh -p 9999 localhost

Devix
()
Ответ на: комментарий от mono

> А mc работает?

А сам как думаешь?:)

MooSE ★★★★
() автор топика
Ответ на: комментарий от vit122

> Значит тоже падает от not well-formed xml. как и все, да?

К сожалению да.

Есть какие-нибудь мысли по этому поводу?

MooSE ★★★★
() автор топика
Ответ на: комментарий от anonymous

>Заворачивать в тарболл 20 кб... Мощно...

А вдруг кто-то захочет по гпрс скачать? У меня например 1коп за 2,5кб :)

FiXer ★★☆☆☆
()

Забавно, давно используем подобный софт для мониторинга и управления весьма сложных процессов, а также для обмена данными между скриптами. Этакая упрощенная CORBA. Тут главное с безопасностью не напортачить.

anonymous
()
Ответ на: комментарий от MooSE

> Ну а если я не с работы что-то захочу сделать?

То таскаешься с ноутом всюду :(

sv75 ★★★★★
()
Ответ на: комментарий от catap

> Гм. Код уродский.

Самое интересное, что несмотря на качество кода и его размер, аффтар
считает эту новость важной и интересной. Я завтра скрипт на 10 строк
напишу, тоже новость запостю - "смАтрите, у меня почта сама
отправляется!!!" или "Я научился пользоваться кроном!".

turist_ua
()

Круто... но плодить файлик с фиксированным названием в /tmp всё же не хорошо...

php-coder ★★★★★
()
Ответ на: комментарий от Devix

>Арендуем сервер без NAT(no-nat.ru).

>С компьютера к которому нужен доступ: ssh -R 9999:localhost:22 no-nat.ru

>С любого компьютера заходим на no-nat.ru: ssh no-nat.ru. Находясь на no-nat.ru: ssh -p 9999 localhost

А если в другой сети ты сидишь за HTTP Proxy?

Absurd ★★★
()
Ответ на: комментарий от ergil

гавно собачье. настоящие программисты делают forktty(), а не направляют в файл как последние быдлокодеры.

scyld
()

>Если оно отправлено администратором, то полученное сообщение выполняется как команда оболочки (os.system())

Собираем конференцию из таких ботов: 20-ю машинами можно синхронно управлять %)))

anonymous
()
Ответ на: комментарий от MooSE

Не понимаю зачем нужен глючный и тяжелый xmmpy. используй xml.etree.cElementTree(входит в поставку со всеми современными питонами), класная штука. А дальше просто: dom = XML(data) REQUESTOR = dom.get('from') body = dom.find('body').text

итп.

А вот ProcessChat действительно лучше переписать с использованием popen итп.

anonymous
()
Ответ на: комментарий от MooSE

Не понимаю зачем нужен глючный и тяжелый xmmpy. используй xml.etree.cElementTree(входит в поставку со всеми современными питонами), класная штука. А дальше просто: dom = XML(data) REQUESTOR = dom.get('from') body = dom.find('body').text

итп.

А вот ProcessChat действительно лучше переписать с использованием popen итп.

anonymous
()
Ответ на: комментарий от scyld

> настоящие программисты делают forktty(), а не направляют в файл как последние быдлокодеры.

"Talks are cheap. Show me the code!" (C) Linus Torvalds.

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

пожалуйста. например:

pid_t chld;
int chld_stat;
int pty;
int tty;
char bfr[4096];
int l;
chld=forkpty(&pty,0,0,0);
if(chld)
{
//we are father
tty=open("/dev/tty",O_RDWR);
do
{
l=read(pty,bfr,4096);
write(tty,bfr,l);
}while(l>0);
//waitpid(chld,&chld_stat,WNOHANG);
}
else
{
execl("/bin/ls","ls","-l");
}
return 0;
}

scyld
()

Т.е., если консольная приблуда захочет интерактива, то бот залипнет намертво?

anonymous
()
Ответ на: комментарий от anonymous

эт с чего ты это взял??? есть ещё IPC. никто не мешает организовать интерактив. чё непонятно?: бот получает вывод шелла, кидает его в чат, а из чата кидает в шелл. через тот самый pty.

ндаа.. быдлокодинг развращает неокрепшие детские умы.

scyld
()

Для своих нужд подобное делал в качестве модуля к gaim
Для сети вида
Комп -> proxy (ms IIS, никаких NAT, возможности управлять им нет) -> icq, jabber -> NAT -> gprs -> кпк
Зачем, затем что бы проверять состяние закачек и ставить на закачку.
Отправку вывода от исполняемых программ производил только после дополнительно отправленной комманды. Затем что бы модуль не подвешивался в ожидании вывода.

PS. Знаю под gaim делать это изврат большой. Да ну и черт с ним.
Так что кто орет что типа это совсем не надо сам себе мудак.

ilnurathome
()
Ответ на: комментарий от scyld

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

anonymous
()
Ответ на: комментарий от MooSE

>А VPN можно поднять допустим до работы. А если я вообще из другого города хочу что-то сделать со своей машиной?

Через работу не получится? Или там тоже NAT?

Captain
()
Ответ на: комментарий от tim2k

> Как обычно, "эксперты ЛОРа" - голимые теоретики.

Ну-ну. Вообще-то у меня самого в ростере жаббер-бот собственного изготовления на перле, только он ещё меньше, чем то, что ты привёл. :) Я не говорю, что это никому нафиг не надо, я только говорю, что о чём новость-то? Такое тяп-ляп очень быстро делается. Вот если б он привёл программку в божеский вид, да её скачали бы хотя бы 100 человек, тогда бы и говорить было о чём.

К тому же ты-то вот ограничил набор команд, это я понимаю, это уже что-то полезное (по крайней мере безвредное). А вот позволять вообще всё через жаббер, да небось через публичные жаббер-серверы и без SSL — это болезненно.

Teak ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.