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.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs