Ruby - remote method invocation

How to start/run a ruby program in a remote machine in a LAN using a
ruby program in local machine?

Net-ssh. Or capistrano!

I am no expert but I use this to manage devices.

require ‘rubygems’
require ‘net/ssh’
require ‘net/ssh/telnet’

class SSH
attr_accessor :errors

def initialize(creds)
begin
@ssh_session = Net::SSH.start(creds[:host], creds[:user],
:password
=> creds[:password], :keys => [])
@ssh = Net::SSH::Telnet.new(“Session” => @ssh_session, “Prompt” =>
creds[:prompt])
@errors = false
rescue Exception => e
@errors = e
end
end

def cmd(command)
@ssh.cmd(command)
end

def close
@ssh_session.close
end

end

I would then create something like this depending on the device type I
was
connecting to.

require ‘./ssh.rb’

class Cisco_ssh < SSH
attr_accessor :config, :users
def initialize(creds)
begin
@host = creds[:host]
@users = []

  creds[:prompt] = /.*>|.*#/
  super(creds)
  @ssh.cmd("en\r#{creds[:enable]}")
  @ssh.cmd("term len 0")

  @config = @ssh.cmd("show run")
  get_users
rescue Exception => e
  @errors = e
end

end

def enable(pass)
@ssh.cmd(“en\r#{pass}”)
end

def termlen=(length)
@ssh.cmd(“term len #{length}”)
end

def close
termlen=24
@ssh_session.close
end

def update_config
@config = @ssh.cmd(“show run”)
get_users
end

private
def get_users
@config.lines.each do |line|
if line.include? “username”
user = {}
user[:username] = line.split[1]
user[:password] =
line.match(/(password|secret).\d.*/)[0].split[2]
@users.push(user)
end
end
end
end

This stuff is pretty old so I should probably review it and clean it up.
Anyhow feel free to use it. I am still learning Ruby myself. Criticisms
are
welcome!

Brandon W. wrote in post #1076989:

Either using ssh, the netssh gem, or by using sockets to implement
communication.

Brandon W.

Thank you everybody… for you amazingly helping words… I think I’ll go
for socket as I am not feeling comfortable with netssh!!! thanks again!

On Sat, Sep 22, 2012 at 2:53 PM, ajay paswan [email protected]
wrote:

Brandon W. wrote in post #1076989:

Either using ssh, the netssh gem, or by using sockets to implement
communication.

Brandon W.

Thank you everybody… for you amazingly helping words… I think I’ll go
for socket as I am not feeling comfortable with netssh!!! thanks again!

There’s also DRb. Although then you have to

a) ensure a DRb server is running on the other machine
b) do authentication yourself.

It all depends… :slight_smile:

Kind regards

robert

Either using ssh, the netssh gem, or by using sockets to implement
communication.

Brandon W.