LINUX.ORG.RU

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


0

0

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

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

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

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

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

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

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

[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 ★★★★★ ()

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

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

blaster999 ★★ ()

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

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

anonymous ()

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

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

muhas ★★★ ()

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

Гениальная концепция для борьбы с NAT/FireWall.

blind ()

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

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

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

MooSE ★★★★ ()

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

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

anonymous ()

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

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

volh ★★ ()

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

велосипед.

Muromec ☆☆ ()

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

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

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

volh ★★ ()

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

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

Legioner ★★★★★ ()

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

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

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

MooSE ★★★★ ()

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

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

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

isden ★★★★★ ()

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

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

AiFiLTr0 ★★★★★ ()

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

> с перенаправлением вывода в файл /tmp/jabebr-shell

Афтар ниасилил http://docs.python.org/lib/module-popen2.html ?

anonymous ()

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

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

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

Вот.

MooSE ★★★★ ()

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

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

generatorglukoff ★★ ()

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

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

Teak ★★★★★ ()

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

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

Acid_Scorpion ()
Ответ на: Re: Jabber-Shell: администрирование посредством Jabber от Acid_Scorpion

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

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

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

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

MooSE ★★★★ ()

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

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

geka ()

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

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

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

isden ★★★★★ ()

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

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

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

Legioner ★★★★★ ()

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

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

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

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

x-com ()

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

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

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

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

MooSE ★★★★ ()

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

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

UserUnknown ★★★★★ ()

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

+1

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

dumka ★★ ()

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

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

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

isden ★★★★★ ()

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

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

Aceler ★★★★★ ()

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

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

Dimian ()

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

Hamachi?

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

anonymous ()

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

Как обычно, "эксперты ЛОРа" - голимые теоретики. Все бы им эсэсаш да
 эсэсэль... Приведенный ниже бот я еще весной использовал для 
управления несколькими своими серверами, разбросанными по городу и два
 в пределах области. 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 ()

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

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

 

j262 ★★ ()

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

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

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

anonymous ()

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

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

deadman ★★ ()

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

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

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

MooSE ★★★★ ()

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

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

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 ★★★★★ ()

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

Падает :)

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

ergil ★★★ ()

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

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

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

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