Class: Checksum::Tools::Remote
- Inherits:
-
Base
- Object
- Base
- Checksum::Tools::Remote
show all
- Defined in:
- lib/checksum-tools/remote.rb
Instance Attribute Summary collapse
Attributes inherited from Base
#host
Instance Method Summary
collapse
Methods inherited from Base
#create_digest_file, #create_digest_files, #digest_filename, #digest_files, #verify_digest_file, #verify_digest_files, #verify_file
Constructor Details
#initialize(host, user, *args) ⇒ Remote
Returns a new instance of Remote.
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/checksum-tools/remote.rb', line 17
def initialize(host, user, *args)
super(*args)
@host = host
@user = user
@digest_length_cache = {}
unless (ssl = opts.delete(:openssl)).nil?
begin
remote_properties[:openssl] = ssl
rescue ConfigurationError
@remote_properties = { :openssl => ssl }
end
write_remote_properties
end
end
|
Instance Attribute Details
#digest_types ⇒ Object
Returns the value of attribute digest_types.
14
15
16
|
# File 'lib/checksum-tools/remote.rb', line 14
def digest_types
@digest_types
end
|
#opts ⇒ Object
Returns the value of attribute opts.
15
16
17
|
# File 'lib/checksum-tools/remote.rb', line 15
def opts
@opts
end
|
Instance Method Details
#digest_file(filename) ⇒ Object
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
# File 'lib/checksum-tools/remote.rb', line 79
def digest_file(filename)
if file_exists?(filename)
size = file_size(filename)
yield(filename, size, 0) if block_given?
output = {}
digest_types.each { |key|
resp = exec! "#{openssl} dgst -#{key} $'#{filename.gsub(/[']/,'\\\\\'')}'"
output[key] = resp.split(/\= /).last
}
yield(filename, size, size) if block_given?
return output
else
raise Errno::ENOENT, filename
end
end
|
#digest_length(type) ⇒ Object
71
72
73
74
75
76
77
|
# File 'lib/checksum-tools/remote.rb', line 71
def digest_length(type)
if @digest_length_cache[type].nil?
resp = exec! "echo - | #{openssl} dgst -#{type}"
@digest_length_cache[type] = resp.split(/\s/).last.chomp.length
end
@digest_length_cache[type]
end
|
#digests ⇒ Object
65
66
67
68
69
|
# File 'lib/checksum-tools/remote.rb', line 65
def digests
resp = ''
resp = exec! "#{openssl} dgst -h 2>&1"
resp.scan(/-(.+?)\s+to use the .+ message digest algorithm/).flatten.collect { |d| d.to_sym }
end
|
#exec!(cmd) ⇒ Object
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/checksum-tools/remote.rb', line 53
def exec!(cmd)
result = ''
ssh do |ch|
ch.exec("bash -l") do |ch2, success|
ch2.on_data { |c,data| result += data }
ch2.send_data "#{cmd}\n"
ch2.send_data "exit\n"
end
end
result.chomp
end
|
#openssl ⇒ Object
32
33
34
|
# File 'lib/checksum-tools/remote.rb', line 32
def openssl
remote_properties[:openssl] || remote_properties['openssl']
end
|
#sftp ⇒ Object
36
37
38
39
40
|
# File 'lib/checksum-tools/remote.rb', line 36
def sftp
@sftp ||= begin
Net::SFTP.start(@host, @user, auth_methods: %w(publickey hostbased keyboard-interactive))
end
end
|
#ssh ⇒ Object
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/checksum-tools/remote.rb', line 42
def ssh
result = sftp.session
if block_given?
channel = result.open_channel do |ch|
yield(ch)
end
channel.wait
end
result
end
|