LINUX.ORG.RU

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


0

0

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

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

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

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

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

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

[17:31:04] <JB> uptime
[17:31:04] <jabber-shell> 17:34:00 up 11 days, 7:50, 1 user, load average: 0.45, 0.33, 0.22

работает ;)

JB ★★★★★
()

Хммм... Какова практическая ценность, а именно - чем лучше SSH? Предназначено ли это ПО для случаев, когда SSH невозможно использовать? Как с безопасностью?

blaster999 ★★
()

идея замечательная

anonymous
()

Гуд. круть несусветная! Продолжайте в том же духе....

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

> это _не_ ssh over xmpp?

Нет. Такая идея обсуждалась, но пока не очень понятно как её реализовать.

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

> работает ;)

Стал бы я нерабочий софт выкладывать:)

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

> Хммм... Какова практическая ценность, а именно - чем лучше SSH?

Ценность... Ну вот понимаешь, моя домашняя машина за натом. Можно конечно покурить в сторону VPN до работы. Ну а если я не с работы что-то захочу сделать?

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

Отлично! Теперь ботнетами можно рулить не в ирке, а в джаббер-конференции.

anonymous
()

писал такое когда-то чтобы проверить работу xmpp4r-simple - нужно было делать бота для возможности покупки через IM. не очень понимаю ценности сего. ну побаловаться, посмотреть - ага, работает. и все. в любом случае, имхо когда человеку понадобится что-нибудь такое для администрирования системы, ему проще и быстрее написать своего бота для своей же цели. тчк

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

>Ценность... Ну вот понимаешь, моя домашняя машина за натом. Можно конечно покурить в сторону VPN до работы. Ну а если я не с работы что-то захочу сделать?

тоже пользовался, пока был за натом.потом захотелось свой жабер-сервер,еще чего, еще чего. в результате покупка статического айпишника за $5 оказалась дешевле всяких костылей и затычек..

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

И куда ты ssh-тся будешь? Здесь нужно какое то подобие callback-а, т.е. связь устанавливает не клиент к серверу, а сервер к клиенту (или точнее сервер к промежуточному хосту, и клиент к промежуточному хосту).

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

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

У моего оператора есть одна невыгодная мне найопка если покупать статический адрес.

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

> У моего оператора есть одна невыгодная мне найопка если покупать статический адрес.

Он серый и за натом ? :)

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

> И куда ты ssh-тся будешь? Здесь нужно какое то подобие callback-а, т.е. связь устанавливает не клиент к серверу, а сервер к клиенту (или точнее сервер к промежуточному хосту, и клиент к промежуточному хосту).

а зачем такие извраты? не проще ли инициировать соединение с клиентской машины? чесно, не вижу реального применения такой фиче...

isden ★★★★★
()

И в чем прикол?
о_О
Например мой бот тоже это умеет, только помимо jabber еще и icq msn aim mail.ru агент. причем весь отсутствующий функционал есть. И пишется это минут за двадцать минут все.
где новость?

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

> Он серый и за натом ? :)

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

Вот.

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

классная хрень для создания remote rootkit. всем взломщикам - качать!

generatorglukoff ★★
()

А в чём прикол? Я такое на перле минут за пять сварганю. И вообще какому чуду пришла в голову эта болезненная мысль?

Teak ★★★★★
()

Идея понятна, но практическое применение не очень. Впадлу запустить на другой консоли ssh клиент чтоли? Вопрос второй - где должен быть запущен бот, там же, где и администрируемая машина? Или все-таки бот умеет что-то по ssh делать?

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

> Идея понятна, но практическое применение не очень. Впадлу запустить на другой консоли ssh клиент чтоли? Вопрос второй - где должен быть запущен бот, там же, где и администрируемая машина? Или все-таки бот умеет что-то по ssh делать?

Я посмотрю как ты полезешь по SSH на машину, стоящую за натом:)

Бот должен стоять на машине, которую ты админить собрался.

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

а чем обычнае жабер боты не нравятся? скажем neutron или freq... в них есть и команды типа !sh...

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

> Я посмотрю как ты полезешь по SSH на машину, стоящую за натом:)

а проброс порта сделать религия не позволяет? :) ну или перманентный vpn поднять. админить машинку посредсттвом таких нестойких вещей, как жабир бот - это ужасно...

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

А если NAT у прова ? А если я не знаю откуда я захочу домашнюю тачку поадминить ?

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

> а зачем такие извраты? не проще ли инициировать соединение с клиентской машины?

Если машина за NAT-ом, у неё нет публичного IP-адреса, с которым можно инициировать соединение. Если сделать port forwarding, то проблема решается, но не всегда это возможно.

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

>а проброс порта сделать религия не позволяет? :) ну или перманентный >vpn поднять. админить машинку посредсттвом таких нестойких вещей, как >жабир бот - это ужасно...

А ежели к NATу доступа нет?

Вобщем когда мне понадобилось, написал ровно _одну_ строку скрипта для centericq - запускать PPP over SSH

x-com
()
Ответ на: комментарий от isden

> а проброс порта сделать религия не позволяет? :) ну или перманентный vpn поднять. админить машинку посредсттвом таких нестойких вещей, как жабир бот - это ужасно...

Порт пробросить нельзя. NAT не мой. NAT моего провайдера. Я просто сижу за ним (моторллер не мой...:)).

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

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

По-моему бот neutron умеет такое, и на питоне... А вообще - это жуткая дырень в безопасности.

UserUnknown ★★★★★
()

+1

буду использовать для доступа к домашнему компьютеру из вне_дома...

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

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

ну, я бы лично, если бы у меня возникла такая необходимость, купил бы VPS'ку у стороннего хостера и до неё завел бы vpn. т.е. сначала лезем по ssh на VPS, а потом оттуда уже домой. я бы не доверил такое дело боту :)

isden ★★★★★
()

Сертификатики бы надо бы все-таки проверять, а то мало ли кто там за JID.

Aceler ★★★★★
()

такого же бота писал для irc/icq. все загнулось за ненадобностью

Dimian
()

Hamachi?

Оба компа могут быть за натом, единственный недостаток ифраструктуру держит АНБ, как составную часть "Эшелона".

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

Как обычно, "эксперты ЛОРа" - голимые теоретики. Все бы им эсэсаш да
 эсэсэль... Приведенный ниже бот я еще весной использовал для 
управления несколькими своими серверами, разбросанными по городу и два
 в пределах области. ssh-ом не везде подлезешь (вот тут то и можно 
вспомнить серые ипы, нат и динамический адрес от адсл), и потом, на 
моем стареньком siemens S65 ssh почемуто не работает :(. Зато Bombus 
запусакется отлично... Ну а когда какая неприятность случается - сразу
 видно, кто из ростера в офлайн ушел.

Короче, автору респект, развивай далее свою утилиту. Ну а я к питону 
равнодушен, буду юзать перл :))

ЗЫ джаббер позволяет делать ваше преусловутое ssl :)

#!/usr/bin/perl

use strict;
use Net::XMPP;
use Net::XMPP::Client;
use Data::Dumper;
use Text::Iconv;

exit if fork;

my $client = new Net::XMPP::Client();

my $owner='tim2k@jabber.ru';

$client->SetCallBacks( 
                onauth => \&onAuth,
                 );
$client->SetMessageCallBacks(
                #normal=>\&messageNormalCB,
                chat=>\&messageChatCB
                );

$client->Execute(hostname=>'jabbus.org',
                         username=>'perlbot',
                         password=>'******',
                         resource=>'server-aquarium'
                        );

$client->Disconnect();
#exit;

###########################################################

sub onAuth {
        $client->PresenceSend(show=>"online", priority=>10);
}

sub messageChatCB {
        my ($sid,$mes) = @_;
        my $sender=$mes->GetFrom();
        my $body=$mes->GetBody();
        my $thread=$mes->GetThread();

        my $s_jid=$sender;
        
        #обрезаем ресурс
        $s_jid=~s|\/.*$||;


        my $reply='';

        for ($body) {
                /^(whois|host)\s+([0-9a-zA-Z.]+)/ && do {
                        $reply=`$1 $2`;
                        last;
                } ||
                
                /^(who|uptime|w|ps|whoami|last|lastlogin|top\ -b|)(\s.*)?$/ && $ s_jid eq $owner && do {
                        $reply = `$1 $2`;
                        last;
                } ||
                /^(autherr)$/ && $s_jid eq $owner && do {
                        $reply = "\n" . `cat /var/log/auth.log`;
                        last;
                } ||

                /^(ping)\s+([0-9a-zA-Z.]+)$/ && do {
                        $reply = "\n\n" . `ping -c 4 $2`;
                        last;
                } ||
                /^exit$/ && $s_jid eq $owner && do {
                        $client->Disconnect();
                } ||
                /^pid$/ && $s_jid eq $owner && do {
                        $reply = $$;
                } ||
                do {
                        $reply = 'п≈п╢п╣я│я▄ я▐ п╥п╟я┌я┐п©п╦п╩';
                }
        }
        $reply and $client->MessageSend(
                        to=>$sender,
                        subject=>"",
                        body=> $reply,
                        type => 'chat',
                        thread => $thread,
                );
}

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

PPS изначальный код не мой, я просто скопипастил (С)

tim2k
()

интересно , а как насчет reverse ssh тунеля , разве он не подходит для случая одного ната ? 

 

j262 ★★
()
Ответ на: комментарий от x-com

>Вобщем когда мне понадобилось, написал ровно _одну_ строку скрипта для centericq - запускать PPP over SSH

Для тех кто в танке напиши эту строку сюда и скажи как пользоваться.

anonymous
()

собственно нафига реализоваывать много команд? команда нужна только одна: по кодовому слову запускать на своей машине скрипт, инициирующий соединение на указанный IP. А там уж что фантазия позволит.

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

> интересно , а как насчет reverse ssh тунеля , разве он не подходит для случая одного ната ?

Ну во-первых не всегда. Во-вторых эта штука позволяет поднять и reverse-ssh :)

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

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

1) вшит путь к конфигу, намертво

2) предполагается что запускаться будет 1 бот на одной машине, хотя это не всегда так

3) к глобальным переменным лучше обращаться, заранее сказав global Var

4) pipes импортируется хотя и не используется

5) зачем-то вручную ввел ограничение на 4 килобайта (я бы сделал отдельным потоком писанину ответов и по N строк, причем N это настраивалось бы в конфиге или указывалось в команде, и максимальное время ожидания этого N тоже неплохо бы сделать)

6) = в пароле быть не может, жаль

7) бот не умеет отвечать на запрос подписки

8) указаны не все зависимости, ибо нужен еще pydns

9) можно обойтись без временных файлов (по коду видно, что автор даже хотел, но что-то не получилось)

Над комментарием:

# Jabber-Shell 20070930"

# http://jabber-shell 20070930

Я очень долго думал, но так его и не понял.

Опечатки в документации и ее нет на языке отличного от русского

Не понятно почему лицензия GPL2 only, да и вообще, не понятно какая лицензия, ибо нигде это не описано, а просто приложен файл с GPL2

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

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

catap ★★★★★
()

Падает :)

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

ergil ★★★
()

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

P.S. Текст лицензии по объёму в 10 раз больше самой программы.

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