Class: Fog::SCP::Real

Inherits:
Object
  • Object
show all
Defined in:
lib/fog/core/scp.rb

Instance Method Summary collapse

Constructor Details

#initialize(address, username, options) ⇒ Real

Returns a new instance of Real.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/fog/core/scp.rb', line 42

def initialize(address, username, options)
  begin
    require "net/scp"
  rescue LoadError
    Fog::Logger.warning("'net/scp' missing, please install and try again.")
    exit(1)
  end

  key_manager = Net::SSH::Authentication::KeyManager.new(nil, options)

  unless options[:key_data] || options[:keys] || options[:password] || key_manager.agent
    raise ArgumentError, ":key_data, :keys, :password or a loaded ssh-agent is required to initialize SSH"
  end

  options[:timeout] = 30
  if options[:key_data] || options[:keys]
    options[:keys_only] = true
    # Explicitly set these so net-ssh doesn't add the default keys
    # as seen at https://github.com/net-ssh/net-ssh/blob/master/lib/net/ssh/authentication/session.rb#L131-146
    options[:keys] = [] unless options[:keys]
    options[:key_data] = [] unless options[:key_data]
  end

  @address  = address
  @username = username
  @options  = { :paranoid => false, :verify_host_key => false }.merge(options)
  @options.delete(:paranoid) if Net::SSH::VALID_OPTIONS.include? :verify_host_key
end

Instance Method Details

#download(remote_path, local_path, download_options = {}, &block) ⇒ Object



81
82
83
84
85
86
87
88
89
# File 'lib/fog/core/scp.rb', line 81

def download(remote_path, local_path, download_options = {}, &block)
  Net::SCP.start(@address, @username, @options) do |scp|
    scp.download!(remote_path, local_path, download_options) do |ch, name, sent, total|
      block.call(ch, name, sent, total) if block
    end
  end
rescue Exception => error
  raise error
end

#upload(local_path, remote_path, upload_options = {}, &block) ⇒ Object



71
72
73
74
75
76
77
78
79
# File 'lib/fog/core/scp.rb', line 71

def upload(local_path, remote_path, upload_options = {}, &block)
  Net::SCP.start(@address, @username, @options) do |scp|
    scp.upload!(local_path, remote_path, upload_options) do |ch, name, sent, total|
      block.call(ch, name, sent, total) if block
    end
  end
rescue Exception => error
  raise error
end