Skip to content

Instantly share code, notes, and snippets.

@pcreux
Created December 17, 2009 06:17
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 14 You must be signed in to fork a gist
  • Save pcreux/258561 to your computer and use it in GitHub Desktop.
Save pcreux/258561 to your computer and use it in GitHub Desktop.
Jabber-SH — SH console via XMPP/Jabber (GTalk) Jabber-SH allows to you to administrate a remote computer via a command line through a Jabber client. It’s like SSH via GoogleTalk! :)
#!/usr/bin/env ruby
# 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 = "A_JABBER_SH_ACCOUNT@gmail.com"
BOT_PASSWORD = "A_JABBER_SH_PASSWORD"
# 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 = "YOUR_EVERYDAY_ACCOUNT@gmail.com"
CLIENT_PASSPHRASE = "A_PASSPHRASE_TO_LOGIN"
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
@lzap
Copy link

lzap commented Dec 31, 2012

Interesting, but crazy ;-)

@AloisMahdal
Copy link

Crazy, but interesting ;-)

@liamsmithuk
Copy link

Interesting, but crazy ;-)

@BurritoBazooka
Copy link

Crazy, but it might just work.

Mosh doesn't work for me. :( Hopefully this does some good.

@spicydog
Copy link

This works perfectly for me.
Thank you very much.
I use this to start revert SSH and work behind NAT like a boss.

@mstbone67a
Copy link

it works.
for raspbmc
sudo apt-get install ruby1.8 rubygems bundler
cd robotito-master
bundle install
./jabbershd run (to see it connect)
One note you must set the google account to accept less secure apps.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment