terça-feira, 7 de fevereiro de 2012

Acesse o Shell do FreeBSD via XMPP

Acesse o Shell do FreeBSD via XMPP ;)

Dica útil para acessar remotamente locais onde você não possa disponibilizar o Shell ou fazer roteamentos.

Dependências

# cd /usr/ports/lang/ruby18 && make install clean

# cd /usr/ports/devel/ruby-gems && make install clean


Agora usando o Ruby Gem:

# gem install session

# gem install xmpp4r-simple


Crie um arquivo como este exemplo:

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

#!/usr/bin/env ruby
# https://gist.github.com/258561
# Jabber-SH — SH console via XMPP/Jabber (GTalk)
#
# Jabber-SH allows you to administrate a remote computer via a command line
# through a Jabber client. It’s like SSH via GoogleTalk! :)
# This is just a hack but it might be usefull sometime to run basic commands
# on a machine that is not accessible via ssh.
#
# Philippe Creux. pcreux/AT/gmail/DOT/com
# Jabber-SH connects to Jabber using the BOT_LOGIN and BOT_PASSWORD details.
BOT_LOGIN = "SEU-FREEBSD@DOMINIOXMPP.COM.BR" #Pode ser o IP ;)
BOT_PASSWORD = "SENHA-XMPP"
# Jabber-SH answers some random epigram via 'fortune' to any message sent to him.
# The user CLIENT_LOGIN logs into the console by sending the CLIENT_PASSPHRASE.
CLIENT_LOGIN = "SUA-CONTA@DOMINIOXMPP.COM.BR"
CLIENT_PASSPHRASE = "SENHA-PARA-LIBERAR-SHELL"
require 'rubygems'
require 'xmpp4r-simple'
require 'session'
puts "Connecting"
if messenger = Jabber::Simple.new(BOT_LOGIN, BOT_PASSWORD)
  puts "Connected"
else
  puts "Ooops - Can't connect"
end
@sh = nil
while true
  messenger.received_messages do |msg|
    puts "Received #{msg.body} from #{msg.from}"
    if msg && msg.from.to_s.include?(CLIENT_LOGIN)
      if msg.body == CLIENT_PASSPHRASE
        if @sh == nil
          @sh = Session::new
          message = "Now logged in!"
        else
          @sh.close && @sh = nil
          message = "Logged out..."
        end
        messenger.deliver(msg.from, message)
      else
        if @sh
          stdout, stderr = @sh.execute(msg.body) if msg.body
          messenger.deliver(msg.from, "\n" + stdout.chomp) unless stdout.empty?
          messenger.deliver(msg.from, "\n" + stderr.chomp) unless stderr.empty?
          messenger.deliver(msg.from, @sh.execute('pwd')[0].chomp + "$>")
        else
          messenger.deliver(msg.from, `fortune`)
        end
      end
    end
  end
  sleep 1
end


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

Feito isso execute o arquivo:

# ruby exemplo.ruby              (eu uso rc.local para inicializar serviços alternativos)

Connecting
Connected


Deverá ser a saida... ( OK ) Adicione o SEU-FREEBSD nos seus contatos, ou use o Roster ( eu fiz com Openfire ).

E converse.

Note: As "besteiras" serão redirecionadas para o fortune. ( Adicione o seu root ou usuário com sudo para aceitar o fortune -- profile -- :/usr/games )

Para habilitar o Shell ( bash , sh ) envie a sua SENHA-PARA-LIBERAR-SHELL

Que não precisa ser a sua senha XMPP.

Com isso, Aparecerá a mensagem:

Now logged in!


Mande bala nos seus comandos.

Dica:

Fortune Star Wars

http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCIQFjAA&url=http%3A%2F%2Ffreecode.com%2Fprojects%2Ffortune-starwars&ei=e3cxT-vYBdCUtwf-m52sBw&usg=AFQjCNHhrez546rrx1rQizQK7Uz4BBDBMQ

Dica de Segurança:

Não aconselho usar em nada crítico, habilite um usuário no sudo para fazer a execução. trocar senhas do squid, coisas rotineiras.

Testes e Gambiarras :

Pode-se conectar de qualquer rede XMPP, eu usei o Openfire e Gtalk. deve funcionar com Facebook / novo MSN, não testei.

* Seguindo a referência abaixo - apt-get para Debian/Ubuntu.

Referências:
http://lethargicpanda.tumblr.com/post/12024497318/command-your-shell-via-xmpp-gtalk
https://gist.github.com/258561