net-ssh 4.1.0 → 4.2.0.rc1
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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.rubocop_todo.yml +1 -1
- data/CHANGES.txt +10 -0
- data/Gemfile +1 -1
- data/appveyor.yml +4 -0
- data/lib/net/ssh.rb +33 -8
- data/lib/net/ssh/authentication/agent.rb +5 -2
- data/lib/net/ssh/config.rb +23 -9
- data/lib/net/ssh/connection/session.rb +9 -0
- data/lib/net/ssh/proxy/command.rb +2 -1
- data/lib/net/ssh/service/forward.rb +53 -3
- data/lib/net/ssh/test.rb +5 -2
- data/lib/net/ssh/test/extensions.rb +1 -1
- data/lib/net/ssh/transport/algorithms.rb +2 -2
- data/lib/net/ssh/transport/session.rb +12 -8
- data/lib/net/ssh/version.rb +2 -2
- data/net-ssh.gemspec +1 -1
- metadata +39 -25
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92ff27262ab7555ea9e90bda3a63d89401b9ad2a
|
4
|
+
data.tar.gz: 24e94ee3884a2d16986772988ace9296301fba12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1735c8964072ea8abffcd8e064e4c60872078376622f6f5947b88a387c158fbf13f2d85f5a80e2591f28390d9c6a3f86cd144f6b75a649e7f2a604c984d8f020
|
7
|
+
data.tar.gz: 872937fed88b544b59c9fc95b3b355409a26cc617770038626147543d0cd913c1f17f9b1cfcd3310418f35bde31b4eb6f18433805585a0a905494d22e2850461
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/.rubocop_todo.yml
CHANGED
@@ -639,7 +639,7 @@ Style/LineEndConcatenation:
|
|
639
639
|
|
640
640
|
# Offense count: 12
|
641
641
|
# Cop supports --auto-correct.
|
642
|
-
Style/
|
642
|
+
Style/MethodCallWithoutArgsParentheses:
|
643
643
|
Exclude:
|
644
644
|
- 'test/authentication/test_key_manager.rb'
|
645
645
|
- 'test/connection/test_session.rb'
|
data/CHANGES.txt
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
=== 4.2.0.rc1
|
2
|
+
|
3
|
+
* Close transport on proxy error [adamruzicka, #526]
|
4
|
+
* Support multiple identity files [Kimura Masayuki, #528]
|
5
|
+
* Move `none` cipher to end of cipher list [Brian Cain, #525]
|
6
|
+
* Deprecate `:paranoid` in favor of `:verify_host_key` [Jared Beck, #524]
|
7
|
+
* Support Multile Include ssh config files [Kasumi Hanazuki, #516]
|
8
|
+
* Support Relative path in ssh confif files [Akinori MUSHA, #510]
|
9
|
+
* add direct-streamlocal@openssh.com support in Forward class [Harald Sitter, #502]
|
10
|
+
|
1
11
|
=== 4.1.0
|
2
12
|
=== 4.1.0.rc1
|
3
13
|
|
data/Gemfile
CHANGED
data/appveyor.yml
CHANGED
@@ -9,6 +9,10 @@ environment:
|
|
9
9
|
- ruby_version: "23-x64"
|
10
10
|
- ruby_version: "22-x64"
|
11
11
|
|
12
|
+
matrix:
|
13
|
+
allow_failures:
|
14
|
+
- ruby_version: "jruby-9.1.2.0"
|
15
|
+
|
12
16
|
#init:
|
13
17
|
# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
|
14
18
|
|
data/lib/net/ssh.rb
CHANGED
@@ -71,8 +71,8 @@ module Net
|
|
71
71
|
:known_hosts, :global_known_hosts_file, :user_known_hosts_file, :host_key_alias,
|
72
72
|
:host_name, :user, :properties, :passphrase, :keys_only, :max_pkt_size,
|
73
73
|
:max_win_size, :send_env, :use_agent, :number_of_password_prompts,
|
74
|
-
:
|
75
|
-
:minimum_dh_bits
|
74
|
+
:append_all_supported_algorithms, :non_interactive, :password_prompt,
|
75
|
+
:agent_socket_factory, :minimum_dh_bits, :verify_host_key
|
76
76
|
]
|
77
77
|
|
78
78
|
# The standard means of starting a new SSH connection. When used with a
|
@@ -157,12 +157,7 @@ module Net
|
|
157
157
|
# authentication failure vs password prompt. Non-interactive applications
|
158
158
|
# should set it to true to prefer failing a password/etc auth methods vs.
|
159
159
|
# asking for password.
|
160
|
-
# * :paranoid =>
|
161
|
-
# strict host-key verification should be (in increasing order here).
|
162
|
-
# You can also provide an own Object which responds to +verify+. The argument
|
163
|
-
# given to +verify+ is a hash consisting of the +:key+, the +:key_blob+,
|
164
|
-
# the +:fingerprint+ and the +:session+. Returning true accepts the host key,
|
165
|
-
# returning false declines it and closes the connection.
|
160
|
+
# * :paranoid => deprecated alias for :verify_host_key
|
166
161
|
# * :passphrase => the passphrase to use when loading a private key (default
|
167
162
|
# is +nil+, for no passphrase)
|
168
163
|
# * :password => the password to use to login
|
@@ -199,6 +194,13 @@ module Net
|
|
199
194
|
# * :agent_socket_factory => enables the user to pass a lambda/block that will serve as the socket factory
|
200
195
|
# Net::SSH::start(user,host,agent_socket_factory: ->{ UNIXSocket.open('/foo/bar') })
|
201
196
|
# example: ->{ UNIXSocket.open('/foo/bar')}
|
197
|
+
# * :verify_host_key => either false, true, :very, or :secure specifying how
|
198
|
+
# strict host-key verification should be (in increasing order here).
|
199
|
+
# You can also provide an own Object which responds to +verify+. The argument
|
200
|
+
# given to +verify+ is a hash consisting of the +:key+, the +:key_blob+,
|
201
|
+
# the +:fingerprint+ and the +:session+. Returning true accepts the host key,
|
202
|
+
# returning false declines it and closes the connection.
|
203
|
+
#
|
202
204
|
# If +user+ parameter is nil it defaults to USER from ssh_config, or
|
203
205
|
# local username
|
204
206
|
def self.start(host, user=nil, options={}, &block)
|
@@ -218,6 +220,8 @@ module Net
|
|
218
220
|
options[:number_of_password_prompts] = 0
|
219
221
|
end
|
220
222
|
|
223
|
+
_support_deprecated_option_paranoid(options)
|
224
|
+
|
221
225
|
if options[:verbose]
|
222
226
|
options[:logger].level = case options[:verbose]
|
223
227
|
when Integer then options[:verbose]
|
@@ -249,6 +253,9 @@ module Net
|
|
249
253
|
transport.close
|
250
254
|
raise AuthenticationFailed, "Authentication failed for user #{user}@#{host}"
|
251
255
|
end
|
256
|
+
rescue => e
|
257
|
+
transport.close unless transport.nil?
|
258
|
+
raise e
|
252
259
|
end
|
253
260
|
|
254
261
|
# Returns a hash of the configuration options for the given host, as read
|
@@ -291,5 +298,23 @@ module Net
|
|
291
298
|
end
|
292
299
|
end
|
293
300
|
private_class_method :_sanitize_options
|
301
|
+
|
302
|
+
def self._support_deprecated_option_paranoid(options)
|
303
|
+
if options.key?(:paranoid)
|
304
|
+
Kernel.warn(
|
305
|
+
":paranoid is deprecated, please use :verify_host_key. Supported " \
|
306
|
+
"values are exactly the same, only the name of the option has changed."
|
307
|
+
)
|
308
|
+
if options.key?(:verify_host_key)
|
309
|
+
Kernel.warn(
|
310
|
+
"Both :paranoid and :verify_host_key were specified. " \
|
311
|
+
":verify_host_key takes precedence, :paranoid will be ignored."
|
312
|
+
)
|
313
|
+
else
|
314
|
+
options[:verify_host_key] = options.delete(:paranoid)
|
315
|
+
end
|
316
|
+
end
|
317
|
+
end
|
318
|
+
private_class_method :_support_deprecated_option_paranoid
|
294
319
|
end
|
295
320
|
end
|
@@ -52,6 +52,9 @@ module Net; module SSH; module Authentication
|
|
52
52
|
SSH_AGENT_CONSTRAIN_LIFETIME = 1
|
53
53
|
SSH_AGENT_CONSTRAIN_CONFIRM = 2
|
54
54
|
|
55
|
+
SSH_AGENT_RSA_SHA2_256 = 0x02
|
56
|
+
SSH_AGENT_RSA_SHA2_512 = 0x04
|
57
|
+
|
55
58
|
# The underlying socket being used to communicate with the SSH agent.
|
56
59
|
attr_reader :socket
|
57
60
|
|
@@ -138,8 +141,8 @@ module Net; module SSH; module Authentication
|
|
138
141
|
|
139
142
|
# Using the agent and the given public key, sign the given data. The
|
140
143
|
# signature is returned in SSH2 format.
|
141
|
-
def sign(key, data)
|
142
|
-
type, reply = send_and_wait(SSH2_AGENT_SIGN_REQUEST, :string, Buffer.from(:key, key), :string, data, :long,
|
144
|
+
def sign(key, data, flags = 0)
|
145
|
+
type, reply = send_and_wait(SSH2_AGENT_SIGN_REQUEST, :string, Buffer.from(:key, key), :string, data, :long, flags)
|
143
146
|
|
144
147
|
raise AgentError, "agent could not sign data with requested identity" if agent_failed(type)
|
145
148
|
raise AgentError, "bad authentication response #{type}" if type != SSH2_AGENT_SIGN_RESPONSE
|
data/lib/net/ssh/config.rb
CHANGED
@@ -72,9 +72,9 @@ module Net; module SSH
|
|
72
72
|
# ones. Returns a hash containing the OpenSSH options. (See
|
73
73
|
# #translate for how to convert the OpenSSH options into Net::SSH
|
74
74
|
# options.)
|
75
|
-
def load(path, host, settings={})
|
75
|
+
def load(path, host, settings={}, base_dir = nil)
|
76
76
|
file = File.expand_path(path)
|
77
|
-
base_dir
|
77
|
+
base_dir ||= File.dirname(file)
|
78
78
|
return settings unless File.readable?(file)
|
79
79
|
|
80
80
|
globals = {}
|
@@ -125,7 +125,7 @@ module Net; module SSH
|
|
125
125
|
(globals[key] ||= []) << value
|
126
126
|
when 'include'
|
127
127
|
included_file_paths(base_dir, value).each do |file_path|
|
128
|
-
globals = load(file_path, host, globals)
|
128
|
+
globals = load(file_path, host, globals, base_dir)
|
129
129
|
end
|
130
130
|
else
|
131
131
|
globals[key] = value unless settings.key?(key)
|
@@ -136,7 +136,7 @@ module Net; module SSH
|
|
136
136
|
(settings[key] ||= []) << value
|
137
137
|
when 'include'
|
138
138
|
included_file_paths(base_dir, value).each do |file_path|
|
139
|
-
settings = load(file_path, host, settings)
|
139
|
+
settings = load(file_path, host, settings, base_dir)
|
140
140
|
end
|
141
141
|
else
|
142
142
|
settings[key] = value unless settings.key?(key)
|
@@ -144,7 +144,16 @@ module Net; module SSH
|
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
147
|
-
|
147
|
+
if globals
|
148
|
+
settings = globals.merge(settings) do |key, oldval, newval|
|
149
|
+
case key
|
150
|
+
when 'identityfile'
|
151
|
+
oldval + newval
|
152
|
+
else
|
153
|
+
newval
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
148
157
|
|
149
158
|
return settings
|
150
159
|
end
|
@@ -303,12 +312,17 @@ module Net; module SSH
|
|
303
312
|
hash
|
304
313
|
end
|
305
314
|
|
306
|
-
def included_file_paths(base_dir,
|
307
|
-
|
308
|
-
|
309
|
-
|
315
|
+
def included_file_paths(base_dir, config_paths)
|
316
|
+
tokenize_config_value(config_paths).flat_map do |path|
|
317
|
+
Dir.glob(File.expand_path(path, base_dir)).select { |f| File.file?(f) }
|
318
|
+
end
|
310
319
|
end
|
311
320
|
|
321
|
+
# Tokenize string into tokens.
|
322
|
+
# A token is a word or a quoted sequence of words, separated by whitespaces.
|
323
|
+
def tokenize_config_value(str)
|
324
|
+
str.scan(/([^"\s]+)?(?:"([^"]+)")?\s*/).map(&:join)
|
325
|
+
end
|
312
326
|
end
|
313
327
|
end
|
314
328
|
|
@@ -176,6 +176,15 @@ module Net; module SSH; module Connection
|
|
176
176
|
def loop(wait=nil, &block)
|
177
177
|
running = block || Proc.new { busy? }
|
178
178
|
loop_forever { break unless process(wait, &running) }
|
179
|
+
begin
|
180
|
+
process(0)
|
181
|
+
rescue IOError => e
|
182
|
+
if e.message =~ /closed/
|
183
|
+
debug { "stream was closed after loop => shallowing exception so it will be re-raised in next loop" }
|
184
|
+
else
|
185
|
+
raise
|
186
|
+
end
|
187
|
+
end
|
179
188
|
end
|
180
189
|
|
181
190
|
# The core of the event loop. It processes a single iteration of the event
|
@@ -28,6 +28,7 @@ module Net; module SSH; module Service
|
|
28
28
|
@remote_forwarded_ports = {}
|
29
29
|
@local_forwarded_ports = {}
|
30
30
|
@agent_forwarded = false
|
31
|
+
@local_forwarded_sockets = {}
|
31
32
|
|
32
33
|
session.on_open_channel('forwarded-tcpip', &method(:forwarded_tcpip))
|
33
34
|
session.on_open_channel('auth-agent', &method(:auth_agent_channel))
|
@@ -99,9 +100,7 @@ module Net; module SSH; module Service
|
|
99
100
|
local_port
|
100
101
|
end
|
101
102
|
|
102
|
-
# Terminates an active local forwarded port.
|
103
|
-
# exists, this will raise an exception. Otherwise, the forwarded connection
|
104
|
-
# is terminated.
|
103
|
+
# Terminates an active local forwarded port.
|
105
104
|
#
|
106
105
|
# ssh.forward.cancel_local(1234)
|
107
106
|
# ssh.forward.cancel_local(1234, "0.0.0.0")
|
@@ -120,6 +119,57 @@ module Net; module SSH; module Service
|
|
120
119
|
@local_forwarded_ports.keys
|
121
120
|
end
|
122
121
|
|
122
|
+
# Starts listening for connections on the local host, and forwards them
|
123
|
+
# to the specified remote socket via the SSH connection. This will
|
124
|
+
# (re)create the local socket file. The remote server needs to have the
|
125
|
+
# socket file already available.
|
126
|
+
#
|
127
|
+
# ssh.forward.local_socket('/tmp/local.sock', '/tmp/remote.sock')
|
128
|
+
def local_socket(local_socket_path, remote_socket_path)
|
129
|
+
File.delete(local_socket_path) if File.exist?(local_socket_path)
|
130
|
+
socket = Socket.unix_server_socket(local_socket_path)
|
131
|
+
|
132
|
+
@local_forwarded_sockets[local_socket_path] = socket
|
133
|
+
|
134
|
+
session.listen_to(socket) do |server|
|
135
|
+
client = server.accept[0]
|
136
|
+
debug { "received connection on #{socket}" }
|
137
|
+
|
138
|
+
channel = session.open_channel("direct-streamlocal@openssh.com",
|
139
|
+
:string, remote_socket_path,
|
140
|
+
:string, nil,
|
141
|
+
:long, 0) do |achannel|
|
142
|
+
achannel.info { "direct channel established" }
|
143
|
+
end
|
144
|
+
|
145
|
+
prepare_client(client, channel, :local)
|
146
|
+
|
147
|
+
channel.on_open_failed do |ch, code, description|
|
148
|
+
channel.error { "could not establish direct channel: #{description} (#{code})" }
|
149
|
+
session.stop_listening_to(channel[:socket])
|
150
|
+
channel[:socket].close
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
local_socket_path
|
155
|
+
end
|
156
|
+
|
157
|
+
# Terminates an active local forwarded socket.
|
158
|
+
#
|
159
|
+
# ssh.forward.cancel_local_socket('/tmp/foo.sock')
|
160
|
+
def cancel_local_socket(local_socket_path)
|
161
|
+
socket = @local_forwarded_sockets.delete(local_socket_path)
|
162
|
+
socket.shutdown rescue nil
|
163
|
+
socket.close rescue nil
|
164
|
+
session.stop_listening_to(socket)
|
165
|
+
end
|
166
|
+
|
167
|
+
# Returns a list of all active locally forwarded sockets. The returned value
|
168
|
+
# is an array of Unix domain socket file paths.
|
169
|
+
def active_local_sockets
|
170
|
+
@local_forwarded_sockets.keys
|
171
|
+
end
|
172
|
+
|
123
173
|
# Requests that all connections on the given remote-port be forwarded via
|
124
174
|
# the local host to the given port/host. The last argument describes the
|
125
175
|
# bind address on the remote host, and defaults to 127.0.0.1.
|
data/lib/net/ssh/test.rb
CHANGED
@@ -71,7 +71,10 @@ module Net; module SSH
|
|
71
71
|
# in these tests. It is a fully functional SSH transport session, operating
|
72
72
|
# over a mock socket (#socket).
|
73
73
|
def transport(options={})
|
74
|
-
@transport ||= Net::SSH::Transport::Session.new(
|
74
|
+
@transport ||= Net::SSH::Transport::Session.new(
|
75
|
+
options[:host] || "localhost",
|
76
|
+
options.merge(kex: "test", host_key: "ssh-rsa", verify_host_key: false, proxy: socket(options))
|
77
|
+
)
|
75
78
|
end
|
76
79
|
|
77
80
|
# First asserts that a story has been described (see #story). Then yields,
|
@@ -86,4 +89,4 @@ module Net; module SSH
|
|
86
89
|
end
|
87
90
|
end
|
88
91
|
|
89
|
-
end; end
|
92
|
+
end; end
|
@@ -155,7 +155,7 @@ module Net; module SSH; module Test
|
|
155
155
|
processed += 1 if reader.idle!
|
156
156
|
end
|
157
157
|
|
158
|
-
raise "no readers were ready for reading, and none had any incoming packets" if processed == 0
|
158
|
+
raise "no readers were ready for reading, and none had any incoming packets" if processed == 0 && wait != 0
|
159
159
|
end
|
160
160
|
end
|
161
161
|
end
|
@@ -32,9 +32,9 @@ module Net; module SSH; module Transport
|
|
32
32
|
diffie-hellman-group-exchange-sha256),
|
33
33
|
encryption: %w(aes128-cbc 3des-cbc blowfish-cbc cast128-cbc
|
34
34
|
aes192-cbc aes256-cbc rijndael-cbc@lysator.liu.se
|
35
|
-
idea-cbc
|
35
|
+
idea-cbc arcfour128 arcfour256 arcfour
|
36
36
|
aes128-ctr aes192-ctr aes256-ctr
|
37
|
-
cast128-ctr blowfish-ctr 3des-ctr),
|
37
|
+
cast128-ctr blowfish-ctr 3des-ctr none),
|
38
38
|
|
39
39
|
hmac: %w(hmac-sha1 hmac-md5 hmac-sha1-96 hmac-md5-96
|
40
40
|
hmac-ripemd160 hmac-ripemd160@openssh.com
|
@@ -61,12 +61,12 @@ module Net; module SSH; module Transport
|
|
61
61
|
@bind_address = options[:bind_address] || nil
|
62
62
|
@options = options
|
63
63
|
|
64
|
-
debug { "establishing connection to #{@host}:#{@port}" }
|
65
|
-
|
66
64
|
@socket =
|
67
65
|
if (factory = options[:proxy])
|
66
|
+
debug { "establishing connection to #{@host}:#{@port} through proxy" }
|
68
67
|
factory.open(@host, @port, options)
|
69
68
|
else
|
69
|
+
debug { "establishing connection to #{@host}:#{@port}" }
|
70
70
|
Socket.tcp(@host, @port, @bind_address, nil,
|
71
71
|
connect_timeout: options[:timeout])
|
72
72
|
end
|
@@ -78,7 +78,7 @@ module Net; module SSH; module Transport
|
|
78
78
|
|
79
79
|
@queue = []
|
80
80
|
|
81
|
-
@host_key_verifier = select_host_key_verifier(options[:
|
81
|
+
@host_key_verifier = select_host_key_verifier(options[:verify_host_key])
|
82
82
|
|
83
83
|
|
84
84
|
@server_version = ServerVersion.new(socket, logger, options[:timeout])
|
@@ -281,8 +281,8 @@ module Net; module SSH; module Transport
|
|
281
281
|
# strict Secure verifier is returned. If the argument happens to respond
|
282
282
|
# to :verify, it is returned directly. Otherwise, an exception
|
283
283
|
# is raised.
|
284
|
-
def select_host_key_verifier(
|
285
|
-
case
|
284
|
+
def select_host_key_verifier(verify_host_key)
|
285
|
+
case verify_host_key
|
286
286
|
when true, nil then
|
287
287
|
Net::SSH::Verifiers::Lenient.new
|
288
288
|
when false then
|
@@ -292,10 +292,14 @@ module Net; module SSH; module Transport
|
|
292
292
|
when :secure then
|
293
293
|
Net::SSH::Verifiers::Secure.new
|
294
294
|
else
|
295
|
-
if
|
296
|
-
|
295
|
+
if verify_host_key.respond_to?(:verify)
|
296
|
+
verify_host_key
|
297
297
|
else
|
298
|
-
raise
|
298
|
+
raise(
|
299
|
+
ArgumentError,
|
300
|
+
"Invalid argument to :verify_host_key (or deprecated " \
|
301
|
+
":paranoid): #{verify_host_key.inspect}"
|
302
|
+
)
|
299
303
|
end
|
300
304
|
end
|
301
305
|
end
|
data/lib/net/ssh/version.rb
CHANGED
@@ -48,14 +48,14 @@ module Net; module SSH
|
|
48
48
|
MAJOR = 4
|
49
49
|
|
50
50
|
# The minor component of this version of the Net::SSH library
|
51
|
-
MINOR =
|
51
|
+
MINOR = 2
|
52
52
|
|
53
53
|
# The tiny component of this version of the Net::SSH library
|
54
54
|
TINY = 0
|
55
55
|
|
56
56
|
# The prerelease component of this version of the Net::SSH library
|
57
57
|
# nil allowed
|
58
|
-
PRE =
|
58
|
+
PRE = "rc1"
|
59
59
|
|
60
60
|
# The current version of the Net::SSH library as a Version instance
|
61
61
|
CURRENT = new(*[MAJOR, MINOR, TINY, PRE].compact)
|
data/net-ssh.gemspec
CHANGED
@@ -38,6 +38,6 @@ Gem::Specification.new do |spec|
|
|
38
38
|
|
39
39
|
spec.add_development_dependency "rake", "~> 12.0"
|
40
40
|
spec.add_development_dependency "minitest", "~> 5.10"
|
41
|
-
spec.add_development_dependency "rubocop", "~> 0.
|
41
|
+
spec.add_development_dependency "rubocop", "~> 0.47.0"
|
42
42
|
spec.add_development_dependency "mocha", ">= 1.2.1"
|
43
43
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-ssh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.2.0.rc1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamis Buck
|
8
8
|
- Delano Mandelbaum
|
9
9
|
- Miklós Fazekas
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain:
|
13
13
|
- |
|
@@ -32,23 +32,24 @@ cert_chain:
|
|
32
32
|
L4d54WIy4HkZCqQXoTSiK5HZMIdXkPk3F1bZdJ8Dy1sMRru0rUkkM5mW7TQ75mfW
|
33
33
|
Zp0QrZyNZhtitrXFbZneGRrIA/8G2Krft5Ly/A==
|
34
34
|
-----END CERTIFICATE-----
|
35
|
-
date: 2017-
|
35
|
+
date: 2017-07-11 00:00:00.000000000 Z
|
36
36
|
dependencies:
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
|
+
name: rbnacl-libsodium
|
38
39
|
requirement: !ruby/object:Gem::Requirement
|
39
40
|
requirements:
|
40
41
|
- - "~>"
|
41
42
|
- !ruby/object:Gem::Version
|
42
43
|
version: 1.0.11
|
43
|
-
name: rbnacl-libsodium
|
44
|
-
prerelease: false
|
45
44
|
type: :development
|
45
|
+
prerelease: false
|
46
46
|
version_requirements: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
48
|
- - "~>"
|
49
49
|
- !ruby/object:Gem::Version
|
50
50
|
version: 1.0.11
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
|
+
name: rbnacl
|
52
53
|
requirement: !ruby/object:Gem::Requirement
|
53
54
|
requirements:
|
54
55
|
- - ">="
|
@@ -57,9 +58,8 @@ dependencies:
|
|
57
58
|
- - "<"
|
58
59
|
- !ruby/object:Gem::Version
|
59
60
|
version: '5.0'
|
60
|
-
name: rbnacl
|
61
|
-
prerelease: false
|
62
61
|
type: :development
|
62
|
+
prerelease: false
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
65
|
- - ">="
|
@@ -69,70 +69,84 @@ dependencies:
|
|
69
69
|
- !ruby/object:Gem::Version
|
70
70
|
version: '5.0'
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
|
+
name: bcrypt_pbkdf
|
72
73
|
requirement: !ruby/object:Gem::Requirement
|
73
74
|
requirements:
|
74
75
|
- - "~>"
|
75
76
|
- !ruby/object:Gem::Version
|
76
|
-
version: '1.
|
77
|
-
|
77
|
+
version: '1.0'
|
78
|
+
type: :development
|
78
79
|
prerelease: false
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - "~>"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '1.0'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: bundler
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - "~>"
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '1.11'
|
79
92
|
type: :development
|
93
|
+
prerelease: false
|
80
94
|
version_requirements: !ruby/object:Gem::Requirement
|
81
95
|
requirements:
|
82
96
|
- - "~>"
|
83
97
|
- !ruby/object:Gem::Version
|
84
98
|
version: '1.11'
|
85
99
|
- !ruby/object:Gem::Dependency
|
100
|
+
name: rake
|
86
101
|
requirement: !ruby/object:Gem::Requirement
|
87
102
|
requirements:
|
88
103
|
- - "~>"
|
89
104
|
- !ruby/object:Gem::Version
|
90
105
|
version: '12.0'
|
91
|
-
name: rake
|
92
|
-
prerelease: false
|
93
106
|
type: :development
|
107
|
+
prerelease: false
|
94
108
|
version_requirements: !ruby/object:Gem::Requirement
|
95
109
|
requirements:
|
96
110
|
- - "~>"
|
97
111
|
- !ruby/object:Gem::Version
|
98
112
|
version: '12.0'
|
99
113
|
- !ruby/object:Gem::Dependency
|
114
|
+
name: minitest
|
100
115
|
requirement: !ruby/object:Gem::Requirement
|
101
116
|
requirements:
|
102
117
|
- - "~>"
|
103
118
|
- !ruby/object:Gem::Version
|
104
119
|
version: '5.10'
|
105
|
-
name: minitest
|
106
|
-
prerelease: false
|
107
120
|
type: :development
|
121
|
+
prerelease: false
|
108
122
|
version_requirements: !ruby/object:Gem::Requirement
|
109
123
|
requirements:
|
110
124
|
- - "~>"
|
111
125
|
- !ruby/object:Gem::Version
|
112
126
|
version: '5.10'
|
113
127
|
- !ruby/object:Gem::Dependency
|
128
|
+
name: rubocop
|
114
129
|
requirement: !ruby/object:Gem::Requirement
|
115
130
|
requirements:
|
116
131
|
- - "~>"
|
117
132
|
- !ruby/object:Gem::Version
|
118
|
-
version: 0.
|
119
|
-
name: rubocop
|
120
|
-
prerelease: false
|
133
|
+
version: 0.47.0
|
121
134
|
type: :development
|
135
|
+
prerelease: false
|
122
136
|
version_requirements: !ruby/object:Gem::Requirement
|
123
137
|
requirements:
|
124
138
|
- - "~>"
|
125
139
|
- !ruby/object:Gem::Version
|
126
|
-
version: 0.
|
140
|
+
version: 0.47.0
|
127
141
|
- !ruby/object:Gem::Dependency
|
142
|
+
name: mocha
|
128
143
|
requirement: !ruby/object:Gem::Requirement
|
129
144
|
requirements:
|
130
145
|
- - ">="
|
131
146
|
- !ruby/object:Gem::Version
|
132
147
|
version: 1.2.1
|
133
|
-
name: mocha
|
134
|
-
prerelease: false
|
135
148
|
type: :development
|
149
|
+
prerelease: false
|
136
150
|
version_requirements: !ruby/object:Gem::Requirement
|
137
151
|
requirements:
|
138
152
|
- - ">="
|
@@ -256,7 +270,7 @@ homepage: https://github.com/net-ssh/net-ssh
|
|
256
270
|
licenses:
|
257
271
|
- MIT
|
258
272
|
metadata: {}
|
259
|
-
post_install_message:
|
273
|
+
post_install_message:
|
260
274
|
rdoc_options: []
|
261
275
|
require_paths:
|
262
276
|
- lib
|
@@ -267,13 +281,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
267
281
|
version: '2.0'
|
268
282
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
269
283
|
requirements:
|
270
|
-
- - "
|
284
|
+
- - ">"
|
271
285
|
- !ruby/object:Gem::Version
|
272
|
-
version:
|
286
|
+
version: 1.3.1
|
273
287
|
requirements: []
|
274
|
-
rubyforge_project:
|
275
|
-
rubygems_version: 2.6.
|
276
|
-
signing_key:
|
288
|
+
rubyforge_project:
|
289
|
+
rubygems_version: 2.6.10
|
290
|
+
signing_key:
|
277
291
|
specification_version: 4
|
278
292
|
summary: 'Net::SSH: a pure-Ruby implementation of the SSH2 client protocol.'
|
279
293
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|