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
70
# 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 => :never }.merge(options)
  @options.delete(:paranoid) if Net::SSH::VALID_OPTIONS.include? :verify_host_key
  @options[:verify_host_key] = false unless Net::SSH::Verifiers.const_defined?(:Never)
end

Instance Method Details

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



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

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



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

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