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
# 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 }.merge(options)
end

Instance Method Details

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



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

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



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

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