module Net::SSH::Multi

  1. lib/net/ssh/multi/channel.rb
  2. lib/net/ssh/multi/channel_proxy.rb
  3. lib/net/ssh/multi/dynamic_server.rb
  4. lib/net/ssh/multi/pending_connection.rb
  5. lib/net/ssh/multi/server.rb
  6. lib/net/ssh/multi/server_list.rb
  7. lib/net/ssh/multi/session.rb
  8. lib/net/ssh/multi/session_actions.rb
  9. lib/net/ssh/multi/subsession.rb
  10. lib/net/ssh/multi/version.rb
  11. lib/net/ssh/multi.rb
  12. show all
Parent: SSH

Net::SSH::Multi is a library for controlling multiple Net::SSH connections via a single interface. It exposes an API similar to that of Net::SSH::Connection::Session and Net::SSH::Connection::Channel, making it simpler to adapt programs designed for single connections to be used with multiple connections.

This library is particularly useful for automating repetitive tasks that must be performed on multiple machines. It executes the commands in parallel, and allows commands to be executed on subsets of servers (defined by groups).

require 'net/ssh/multi'
Net::SSH::Multi.start do |session|
  # access servers via a gateway
  session.via 'gateway', 'gateway-user'

  # define the servers we want to use
  session.use 'user1@host1'
  session.use 'user2@host2'

  # define servers in groups for more granular access
  session.group :app do
    session.use 'user@app1'
    session.use 'user@app2'
  end

  # execute commands on all servers
  session.exec "uptime"

  # execute commands on a subset of servers
  session.with(:app).exec "hostname"

  # run the aggregated event loop
  session.loop
end

See Net::SSH::Multi::Session for more documentation.

Methods

Public Class

  1. start

Public Class methods

start (options={})

This is a convenience method for instantiating a new Net::SSH::Multi::Session. If a block is given, the session will be yielded to the block automatically closed (see Net::SSH::Multi::Session#close) when the block finishes. Otherwise, the new session will be returned.

Net::SSH::Multi.start do |session|
  # ...
end
session = Net::SSH::Multi.start
# ...
session.close

Any options are passed directly to Net::SSH::Multi::Session.new (q.v.).

[show source]
# File lib/net/ssh/multi.rb, line 57
def self.start(options={})
  session = Session.new(options)

  if block_given?
    begin
      yield session
      session.loop
      session.close
    end
  else
    return session
  end
end