module Spectre::SSH

Public Class Methods

ssh(name, config = {}) click to toggle source
# File lib/spectre/ssh.rb, line 109
def ssh name, config = {}, &block
  raise "SSH connection '#{name}' not configured" unless @@cfg.key?(name) or config.count > 0

  cfg = @@cfg[name] || {}

  host = cfg['host'] || name
  username = config[:username] || cfg['username']
  password = config[:password] || cfg['password']

  opts = {}
  opts[:password] = password
  opts[:port] = config[:port] || cfg['port'] || 22
  opts[:keys] = [cfg['key']] if cfg.key? 'key'
  opts[:passphrase] = cfg['passphrase'] if cfg.key? 'passphrase'

  opts[:auth_methods] = []
  opts[:auth_methods].push 'publickey' if opts[:keys]
  opts[:auth_methods].push 'password' if opts[:password]

  ssh_con = SSHConnection.new(host, username, opts, @@logger)

  begin
    ssh_con.instance_eval &block
  ensure
    ssh_con.close
  end
end