spectre-ssh 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/spectre/ssh.rb +46 -18
- metadata +43 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8548d3d2c8b5cf86005bc9c9884e8ffad6250783c997af68a9c37b5b1577d759
|
4
|
+
data.tar.gz: 70d690e4e1c0e16a5fcd8f9b3c05c3b00721933a374e6550410558aa0927742d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef75af4b62cfd54b508b3ab2b0d974a811dc68f7c270ed2bb214720984f8d421bd90727e207f8208c402a1a0f7e83df3b7ac1c1081f7cfc07a993b02b81458a2
|
7
|
+
data.tar.gz: 9da77291b02ed303bd09273b5e85b073646fbd4cce4d17019d1230fd2bb32c279f6b76b55d13088e5674bc154ec48e52da33853a11e09b8cec85e854748d8ea6
|
data/lib/spectre/ssh.rb
CHANGED
@@ -7,6 +7,9 @@ module Spectre
|
|
7
7
|
module SSH
|
8
8
|
@@cfg = {}
|
9
9
|
|
10
|
+
class SSHError < Exception
|
11
|
+
end
|
12
|
+
|
10
13
|
class SSHConnection < Spectre::DslClass
|
11
14
|
def initialize host, username, opts, logger
|
12
15
|
opts[:non_interactive] = true
|
@@ -20,6 +23,24 @@ module Spectre
|
|
20
23
|
@__output = ''
|
21
24
|
end
|
22
25
|
|
26
|
+
def username user
|
27
|
+
@__username = user
|
28
|
+
end
|
29
|
+
|
30
|
+
def password pass
|
31
|
+
@__opts[:password] = pass
|
32
|
+
@__opts[:auth_methods].push 'password' unless @__opts[:auth_methods].include? 'password'
|
33
|
+
end
|
34
|
+
|
35
|
+
def private_key file_path
|
36
|
+
@__opts[:keys] = [file_path]
|
37
|
+
@__opts[:auth_methods].push 'publickey' unless @__opts[:auth_methods].include? 'publickey'
|
38
|
+
end
|
39
|
+
|
40
|
+
def passphrase phrase
|
41
|
+
@__opts[:passphrase] = phrase
|
42
|
+
end
|
43
|
+
|
23
44
|
def file_exists path
|
24
45
|
exec "ls #{path}"
|
25
46
|
exit_code == 0
|
@@ -32,11 +53,19 @@ module Spectre
|
|
32
53
|
|
33
54
|
def connect!
|
34
55
|
return unless @__session == nil or @__session.closed?
|
35
|
-
|
56
|
+
|
57
|
+
begin
|
58
|
+
@__session = Net::SSH.start(@__host, @__username, @__opts)
|
59
|
+
rescue SocketError
|
60
|
+
raise SSHError.new("Unable to connect to #{@__host} with user #{@__username}")
|
61
|
+
rescue Net::SSH::AuthenticationFailed
|
62
|
+
raise SSHError.new("Authentication failed for #{@__username}@#{@__host}. Please check password, SSH keys and passphrases.")
|
63
|
+
end
|
36
64
|
end
|
37
65
|
|
38
66
|
def close
|
39
67
|
return unless @__session and not @__session.closed?
|
68
|
+
|
40
69
|
@__session.close
|
41
70
|
end
|
42
71
|
|
@@ -64,20 +93,20 @@ module Spectre
|
|
64
93
|
log_str = "#{@__session.options[:user]}@#{@__session.host} -p #{@__session.options[:port]} #{command}"
|
65
94
|
|
66
95
|
@channel = @__session.open_channel do |channel|
|
67
|
-
channel.exec(command) do |
|
96
|
+
channel.exec(command) do |_ch, success|
|
68
97
|
abort "could not execute #{command} on #{@__session.host}" unless success
|
69
98
|
|
70
99
|
@__output = ''
|
71
100
|
|
72
|
-
channel.on_data do |
|
101
|
+
channel.on_data do |_, data|
|
73
102
|
@__output += data
|
74
103
|
end
|
75
104
|
|
76
|
-
channel.on_extended_data do |
|
105
|
+
channel.on_extended_data do |_, _type, data|
|
77
106
|
@__output += data
|
78
107
|
end
|
79
108
|
|
80
|
-
channel.on_request('exit-status') do |
|
109
|
+
channel.on_request('exit-status') do |_, data|
|
81
110
|
@__exit_code = data.read_long
|
82
111
|
end
|
83
112
|
|
@@ -85,7 +114,6 @@ module Spectre
|
|
85
114
|
# exit_code = data.read_long
|
86
115
|
# end
|
87
116
|
end
|
88
|
-
|
89
117
|
end
|
90
118
|
|
91
119
|
@channel.wait
|
@@ -106,24 +134,24 @@ module Spectre
|
|
106
134
|
|
107
135
|
|
108
136
|
class << self
|
109
|
-
def ssh name,
|
110
|
-
raise "SSH connection '#{name}' not configured" unless @@cfg.key?(name) or config.count > 0
|
111
|
-
|
137
|
+
def ssh name, options = {}, &block
|
112
138
|
cfg = @@cfg[name] || {}
|
113
139
|
|
114
140
|
host = cfg['host'] || name
|
115
|
-
username =
|
116
|
-
password =
|
141
|
+
username = options[:username] || cfg['username']
|
142
|
+
password = options[:password] || cfg['password']
|
117
143
|
|
118
144
|
opts = {}
|
119
145
|
opts[:password] = password
|
120
|
-
opts[:port] =
|
121
|
-
|
122
|
-
|
146
|
+
opts[:port] = options[:port] || cfg['port'] || 22
|
147
|
+
|
148
|
+
ssh_key = options[:key] || cfg['key']
|
149
|
+
opts[:keys] = [ssh_key] unless ssh_key.nil?
|
150
|
+
opts[:passphrase] = options[:passphrase] || cfg['passphrase']
|
123
151
|
|
124
152
|
opts[:auth_methods] = []
|
125
|
-
opts[:auth_methods].push 'publickey'
|
126
|
-
opts[:auth_methods].push 'password'
|
153
|
+
opts[:auth_methods].push 'publickey' unless opts[:keys].nil? or opts[:keys].empty?
|
154
|
+
opts[:auth_methods].push 'password' unless opts[:password].nil?
|
127
155
|
|
128
156
|
ssh_con = SSHConnection.new(host, username, opts, @@logger)
|
129
157
|
|
@@ -136,7 +164,7 @@ module Spectre
|
|
136
164
|
end
|
137
165
|
|
138
166
|
Spectre.register do |config|
|
139
|
-
@@logger = ::
|
167
|
+
@@logger = Spectre::Logging::ModuleLogger.new(config, 'spectre/ssh')
|
140
168
|
|
141
169
|
if config.key? 'ssh'
|
142
170
|
config['ssh'].each do |name, cfg|
|
@@ -147,4 +175,4 @@ module Spectre
|
|
147
175
|
|
148
176
|
Spectre.delegate :ssh, to: self
|
149
177
|
end
|
150
|
-
end
|
178
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spectre-ssh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Neubauer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: openssl
|
@@ -16,58 +16,85 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 3.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 3.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: net-ssh
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 7.1.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 7.1.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: spectre-core
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
47
|
+
version: 1.14.3
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
54
|
+
version: 1.14.3
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: ed25519
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.3.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.3.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bcrypt_pbkdf
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.1.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.1.0
|
55
83
|
description: Adds SSH access functionality to the spectre framework
|
56
84
|
email:
|
57
|
-
-
|
85
|
+
- christian.neubauer@ionos.com
|
58
86
|
executables: []
|
59
87
|
extensions: []
|
60
88
|
extra_rdoc_files: []
|
61
89
|
files:
|
62
90
|
- lib/spectre/ssh.rb
|
63
|
-
homepage: https://github.com/
|
91
|
+
homepage: https://github.com/ionos-spectre/spectre-ssh
|
64
92
|
licenses:
|
65
93
|
- MIT
|
66
94
|
metadata:
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
changelog_uri: https://github.com/cneubauer/spectre-ssh/blob/master/CHANGELOG.md
|
95
|
+
homepage_uri: https://github.com/ionos-spectre/spectre-ssh
|
96
|
+
source_code_uri: https://github.com/ionos-spectre/spectre-ssh
|
97
|
+
changelog_uri: https://github.com/ionos-spectre/spectre-ssh/blob/master/CHANGELOG.md
|
71
98
|
post_install_message:
|
72
99
|
rdoc_options: []
|
73
100
|
require_paths:
|
@@ -76,14 +103,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
103
|
requirements:
|
77
104
|
- - ">="
|
78
105
|
- !ruby/object:Gem::Version
|
79
|
-
version:
|
106
|
+
version: 3.0.0
|
80
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
108
|
requirements:
|
82
109
|
- - ">="
|
83
110
|
- !ruby/object:Gem::Version
|
84
111
|
version: '0'
|
85
112
|
requirements: []
|
86
|
-
rubygems_version: 3.
|
113
|
+
rubygems_version: 3.3.26
|
87
114
|
signing_key:
|
88
115
|
specification_version: 4
|
89
116
|
summary: SSH module for spectre
|