remotus 0.6.0 → 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/.gitignore +2 -0
- data/.rubocop.yml +2 -2
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +37 -36
- data/docker/ssh_integration_spec.rb +2 -2
- data/lib/remotus/ssh_connection.rb +9 -1
- data/lib/remotus/version.rb +1 -1
- data/remotus.gemspec +4 -4
- metadata +9 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e6b07dbe42ab741bdb688bed9f6ce1d09ed2af8643291c57ec9aeedaaad0a19a
|
|
4
|
+
data.tar.gz: a39ecf434564157c1e72d98cf840abadc1a406f91988ee7c47cf7c22d9643760
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f48c3e374b870a60664cf35838204755a83599a534113309abfecb40e5a5862f10091bd7bc19d8353a8a5716c71fe02dea043f891db998dd521451a998be4419
|
|
7
|
+
data.tar.gz: 0c3d1f3e5dfbae5c2aeaec9d18f3eb4f4b99759b4c883e3298691e7cad7a91fa71d03f595cffb9bab07f9191844284a211c5fb76ff7900af56791ea6ed9a6f2a
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
## [1.1.0] - 2023-05-25
|
|
2
|
+
* Improve exponential backoff during SSH retries.
|
|
3
|
+
* Force connection close on IOError (closed stream).
|
|
4
|
+
|
|
5
|
+
## [1.0.0] - 2023-04-25
|
|
6
|
+
* Update SSH dependencies to handle `pkeys are immutable on OpenSSL 3.0` errors on newer Ruby versions
|
|
7
|
+
* Remove Ruby 2.5 support
|
|
8
|
+
|
|
1
9
|
## [0.6.0] - 2022-09-26
|
|
2
10
|
* Add `#close` method to all connection types
|
|
3
11
|
* Fix SSH gateway connection caching
|
data/Gemfile.lock
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
remotus (
|
|
5
|
-
connection_pool (~> 2.
|
|
6
|
-
net-scp (~>
|
|
7
|
-
net-ssh (~>
|
|
4
|
+
remotus (1.1.0)
|
|
5
|
+
connection_pool (~> 2.4)
|
|
6
|
+
net-scp (~> 4.0)
|
|
7
|
+
net-ssh (~> 7.1)
|
|
8
8
|
net-ssh-gateway (~> 2.0)
|
|
9
9
|
winrm (~> 2.3)
|
|
10
10
|
winrm-elevated (~> 1.2)
|
|
@@ -15,9 +15,9 @@ GEM
|
|
|
15
15
|
specs:
|
|
16
16
|
ast (2.4.2)
|
|
17
17
|
builder (3.2.4)
|
|
18
|
-
connection_pool (2.
|
|
18
|
+
connection_pool (2.4.0)
|
|
19
19
|
diff-lcs (1.5.0)
|
|
20
|
-
erubi (1.
|
|
20
|
+
erubi (1.12.0)
|
|
21
21
|
ffi (1.15.5)
|
|
22
22
|
gssapi (1.3.1)
|
|
23
23
|
ffi (>= 1.0.1)
|
|
@@ -25,59 +25,61 @@ GEM
|
|
|
25
25
|
builder (>= 2.1.2)
|
|
26
26
|
rexml (~> 3.0)
|
|
27
27
|
httpclient (2.8.3)
|
|
28
|
-
json (2.6.
|
|
28
|
+
json (2.6.3)
|
|
29
29
|
little-plugger (1.1.4)
|
|
30
30
|
logging (2.3.1)
|
|
31
31
|
little-plugger (~> 1.1)
|
|
32
32
|
multi_json (~> 1.14)
|
|
33
33
|
multi_json (1.15.0)
|
|
34
|
-
net-scp (
|
|
35
|
-
net-ssh (>= 2.6.5, <
|
|
36
|
-
net-ssh (
|
|
34
|
+
net-scp (4.0.0)
|
|
35
|
+
net-ssh (>= 2.6.5, < 8.0.0)
|
|
36
|
+
net-ssh (7.1.0)
|
|
37
37
|
net-ssh-gateway (2.0.0)
|
|
38
38
|
net-ssh (>= 4.0.0)
|
|
39
39
|
nori (2.6.0)
|
|
40
|
-
parallel (1.
|
|
41
|
-
parser (3.
|
|
40
|
+
parallel (1.23.0)
|
|
41
|
+
parser (3.2.2.1)
|
|
42
42
|
ast (~> 2.4.1)
|
|
43
43
|
rainbow (3.1.1)
|
|
44
44
|
rake (13.0.6)
|
|
45
|
-
regexp_parser (2.
|
|
45
|
+
regexp_parser (2.8.0)
|
|
46
46
|
rexml (3.2.5)
|
|
47
|
-
rspec (3.
|
|
48
|
-
rspec-core (~> 3.
|
|
49
|
-
rspec-expectations (~> 3.
|
|
50
|
-
rspec-mocks (~> 3.
|
|
51
|
-
rspec-core (3.
|
|
52
|
-
rspec-support (~> 3.
|
|
53
|
-
rspec-expectations (3.
|
|
47
|
+
rspec (3.12.0)
|
|
48
|
+
rspec-core (~> 3.12.0)
|
|
49
|
+
rspec-expectations (~> 3.12.0)
|
|
50
|
+
rspec-mocks (~> 3.12.0)
|
|
51
|
+
rspec-core (3.12.2)
|
|
52
|
+
rspec-support (~> 3.12.0)
|
|
53
|
+
rspec-expectations (3.12.3)
|
|
54
54
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
55
|
-
rspec-support (~> 3.
|
|
56
|
-
rspec-mocks (3.
|
|
55
|
+
rspec-support (~> 3.12.0)
|
|
56
|
+
rspec-mocks (3.12.5)
|
|
57
57
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
58
|
-
rspec-support (~> 3.
|
|
59
|
-
rspec-support (3.
|
|
60
|
-
rubocop (1.
|
|
58
|
+
rspec-support (~> 3.12.0)
|
|
59
|
+
rspec-support (3.12.0)
|
|
60
|
+
rubocop (1.50.2)
|
|
61
61
|
json (~> 2.3)
|
|
62
62
|
parallel (~> 1.10)
|
|
63
|
-
parser (>= 3.
|
|
63
|
+
parser (>= 3.2.0.0)
|
|
64
64
|
rainbow (>= 2.2.2, < 4.0)
|
|
65
65
|
regexp_parser (>= 1.8, < 3.0)
|
|
66
66
|
rexml (>= 3.2.5, < 4.0)
|
|
67
|
-
rubocop-ast (>= 1.
|
|
67
|
+
rubocop-ast (>= 1.28.0, < 2.0)
|
|
68
68
|
ruby-progressbar (~> 1.7)
|
|
69
|
-
unicode-display_width (>=
|
|
70
|
-
rubocop-ast (1.
|
|
71
|
-
parser (>= 3.
|
|
69
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
|
70
|
+
rubocop-ast (1.28.0)
|
|
71
|
+
parser (>= 3.2.1.0)
|
|
72
|
+
rubocop-capybara (2.18.0)
|
|
73
|
+
rubocop (~> 1.41)
|
|
72
74
|
rubocop-rake (0.6.0)
|
|
73
75
|
rubocop (~> 1.0)
|
|
74
|
-
rubocop-rspec (2.
|
|
76
|
+
rubocop-rspec (2.20.0)
|
|
75
77
|
rubocop (~> 1.33)
|
|
76
|
-
|
|
78
|
+
rubocop-capybara (~> 2.17)
|
|
79
|
+
ruby-progressbar (1.13.0)
|
|
77
80
|
rubyntlm (0.6.3)
|
|
78
81
|
rubyzip (2.3.2)
|
|
79
|
-
unicode-display_width (2.
|
|
80
|
-
webrick (1.7.0)
|
|
82
|
+
unicode-display_width (2.4.2)
|
|
81
83
|
winrm (2.3.6)
|
|
82
84
|
builder (>= 2.1.2)
|
|
83
85
|
erubi (~> 1.8)
|
|
@@ -96,8 +98,7 @@ GEM
|
|
|
96
98
|
logging (>= 1.6.1, < 3.0)
|
|
97
99
|
rubyzip (~> 2.0)
|
|
98
100
|
winrm (~> 2.0)
|
|
99
|
-
yard (0.9.
|
|
100
|
-
webrick (~> 1.7.0)
|
|
101
|
+
yard (0.9.34)
|
|
101
102
|
|
|
102
103
|
PLATFORMS
|
|
103
104
|
ruby
|
|
@@ -23,8 +23,8 @@ RSpec.describe "Remotus::SshConnection Integration Tests" do
|
|
|
23
23
|
`docker-compose -f "docker-compose.yml" down -v`
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
let(:test_script) {
|
|
27
|
-
let(:test_script_dest) {
|
|
26
|
+
let(:test_script) { File.join(__dir__, "ssh_integration_script.sh") }
|
|
27
|
+
let(:test_script_dest) { File.join("/home/testuser", File.basename(test_script)) }
|
|
28
28
|
|
|
29
29
|
context "when a gateway and inaccessible target host exist" do
|
|
30
30
|
let(:gateway_hostname) { `docker ps | grep remotus_gateway`.split.first }
|
|
@@ -20,7 +20,7 @@ module Remotus
|
|
|
20
20
|
KEEPALIVE_INTERVAL = 300
|
|
21
21
|
|
|
22
22
|
# Number of default retries
|
|
23
|
-
DEFAULT_RETRIES =
|
|
23
|
+
DEFAULT_RETRIES = 8
|
|
24
24
|
|
|
25
25
|
# Base options for new SSH connections
|
|
26
26
|
BASE_CONNECT_OPTIONS = { non_interactive: true, keepalive: true, keepalive_interval: KEEPALIVE_INTERVAL }.freeze
|
|
@@ -424,6 +424,8 @@ module Remotus
|
|
|
424
424
|
# @param [Integer] retries number of retries
|
|
425
425
|
#
|
|
426
426
|
def with_retries(command, retries)
|
|
427
|
+
sleep_time = 1
|
|
428
|
+
|
|
427
429
|
yield if block_given?
|
|
428
430
|
rescue Remotus::AuthenticationError, Net::SSH::AuthenticationFailed => e
|
|
429
431
|
# Re-raise exception if the retry count is exceeded
|
|
@@ -446,6 +448,12 @@ module Remotus
|
|
|
446
448
|
retries -= 1
|
|
447
449
|
raise if e.to_s != "closed stream" || retries.negative?
|
|
448
450
|
|
|
451
|
+
# Close the existing connection before retrying again
|
|
452
|
+
close
|
|
453
|
+
|
|
454
|
+
Remotus.logger.debug { "Sleeping for #{sleep_time} seconds before next retry..." }
|
|
455
|
+
sleep sleep_time
|
|
456
|
+
sleep_time *= 2 # Double delay for each retry
|
|
449
457
|
retry
|
|
450
458
|
end
|
|
451
459
|
|
data/lib/remotus/version.rb
CHANGED
data/remotus.gemspec
CHANGED
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
|
12
12
|
spec.description = "Ruby gem for connecting to remote systems seamlessly via WinRM or SSH."
|
|
13
13
|
spec.homepage = "https://github.com/wheatevo/remotus"
|
|
14
14
|
spec.license = "MIT"
|
|
15
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.
|
|
15
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.6.0")
|
|
16
16
|
|
|
17
17
|
spec.metadata["homepage_uri"] = spec.homepage
|
|
18
18
|
spec.metadata["source_code_uri"] = "https://github.com/wheatevo/remotus"
|
|
@@ -29,9 +29,9 @@ Gem::Specification.new do |spec|
|
|
|
29
29
|
spec.require_paths = ["lib"]
|
|
30
30
|
|
|
31
31
|
# Dependencies
|
|
32
|
-
spec.add_dependency "connection_pool", "~> 2.
|
|
33
|
-
spec.add_dependency "net-scp", "~>
|
|
34
|
-
spec.add_dependency "net-ssh", "~>
|
|
32
|
+
spec.add_dependency "connection_pool", "~> 2.4"
|
|
33
|
+
spec.add_dependency "net-scp", "~> 4.0"
|
|
34
|
+
spec.add_dependency "net-ssh", "~> 7.1"
|
|
35
35
|
spec.add_dependency "net-ssh-gateway", "~> 2.0"
|
|
36
36
|
spec.add_dependency "winrm", "~> 2.3"
|
|
37
37
|
spec.add_dependency "winrm-elevated", "~> 1.2"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: remotus
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matthew Newell
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-05-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: connection_pool
|
|
@@ -16,42 +16,42 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '2.
|
|
19
|
+
version: '2.4'
|
|
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: '2.
|
|
26
|
+
version: '2.4'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: net-scp
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
33
|
+
version: '4.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: '4.0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: net-ssh
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '7.1'
|
|
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: '
|
|
54
|
+
version: '7.1'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: net-ssh-gateway
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -248,7 +248,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
248
248
|
requirements:
|
|
249
249
|
- - ">="
|
|
250
250
|
- !ruby/object:Gem::Version
|
|
251
|
-
version: 2.
|
|
251
|
+
version: 2.6.0
|
|
252
252
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
253
253
|
requirements:
|
|
254
254
|
- - ">="
|