Skip to content

Instantly share code, notes, and snippets.

@Narnach
Created January 26, 2009 06:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Narnach/52727 to your computer and use it in GitHub Desktop.
Save Narnach/52727 to your computer and use it in GitHub Desktop.
s1 = {:host=>'foo', :user => 'foobar'}
s2 = {:host=>'bar', :user => 'foobar'}
s3 = {:host=>'baz', :user => 'foobar'}
s4 = {:host=>'moo', :user => 'foobar', :options => {:password => 'barfoo'}}
def gate(s, s2, opts={})
gw = Net::SSH::Gateway.new(s[:host], s[:user], {:port => 22}.merge(opts))
gw_port = gw.open(s2[:host], s2[:port])
yield(gw_port)
ensure
gw.shutdown!
end
gate(s, s2) do |gw_port|
gate(s2, s3, {:port => gw_port}) do |gw2_port|
gw3 = Net::SSH::Gateway.new(s3[:host], s3[:user], {:port => gw2_port})
gw3.ssh(s4[:host], s4[:user], s4[:options]) do |session|
session.exec!('uptime')
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment