Skip to content

Instantly share code, notes, and snippets.

@Oshuma
Forked from pcreux/Jabber-SH
Created January 29, 2010 08:50
Show Gist options
  • Save Oshuma/289567 to your computer and use it in GitHub Desktop.
Save Oshuma/289567 to your computer and use it in GitHub Desktop.
#!/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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment