net-ssh 2.8.0 → 2.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/.travis.yml +11 -0
- data/CHANGES.txt +20 -0
- data/Rakefile +2 -2
- data/gem-public_cert.pem +15 -15
- data/lib/net/ssh.rb +4 -2
- data/lib/net/ssh/authentication/agent/socket.rb +2 -0
- data/lib/net/ssh/authentication/key_manager.rb +6 -5
- data/lib/net/ssh/authentication/session.rb +2 -2
- data/lib/net/ssh/config.rb +29 -14
- data/lib/net/ssh/known_hosts.rb +12 -4
- data/lib/net/ssh/test/socket.rb +1 -1
- data/lib/net/ssh/transport/algorithms.rb +13 -4
- data/lib/net/ssh/version.rb +1 -1
- data/net-ssh.gemspec +5 -2
- data/test/authentication/test_key_manager.rb +7 -2
- data/test/configs/auth_off +2 -1
- data/test/test_config.rb +28 -2
- data/test/transport/test_algorithms.rb +21 -22
- metadata +32 -3
- metadata.gz.sig +0 -0
data.tar.gz.sig
ADDED
Binary file
|
data/.travis.yml
ADDED
data/CHANGES.txt
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
|
2
2
|
|
3
|
+
=== 2.9.0 / 30 Apr 2014
|
4
|
+
|
5
|
+
* New ciphers [chr4]
|
6
|
+
* Added host keys: ssh-rsa-cert-v01@openssh.com ssh-rsa-cert-v00@openssh.com ssh-ed25519-cert-v01@openssh.com ssh-ed25519
|
7
|
+
* Added HMACs: hmac-sha2-512-etm@openssh.com hmac-sha2-256-etm@openssh.com umac-128-etm@openssh.com
|
8
|
+
* Added Kex: aes256-gcm@openssh.com aes128-gcm@openssh.com curve25519-sha256@libssh.org
|
9
|
+
* Added private key support for id_ed25519
|
10
|
+
* IdentiesOnly will not disable ssh_agent - fixes #148 and new fix for #137 [mfazekas]
|
11
|
+
* Ignore errors during ssh agent negotiation [simonswine, jasiek]
|
12
|
+
* Added an optional "options" argument to test socket open method [jefmathiot]
|
13
|
+
* Added gem signing (again) with new cert [delano]
|
14
|
+
|
15
|
+
|
16
|
+
=== 2.8.1 / 19 Feb 2014
|
17
|
+
|
18
|
+
* Correct location of global known_hosts files [mfischer-zd]
|
19
|
+
* Fix for password authentication [blackpond, zachlipton, delano]
|
20
|
+
|
21
|
+
|
3
22
|
=== 2.8.0 / 01 Feb 2014
|
4
23
|
|
5
24
|
* Handle ssh-rsa and ssh-dss certificate files [bobveznat]
|
@@ -17,6 +36,7 @@
|
|
17
36
|
* Allow KeyManager to recover from incompatible agents [ecki, delano]
|
18
37
|
* Fix for "Authentication Method determination can pick up a class from the root namespace" [dave.sieh]
|
19
38
|
|
39
|
+
|
20
40
|
=== 2.7.0 / 11 Sep 2013
|
21
41
|
|
22
42
|
* Fix for 'Could not parse PKey: no start line' error on private keys with passphrases (issue #101) [metametaclass]
|
data/Rakefile
CHANGED
@@ -34,8 +34,8 @@ begin
|
|
34
34
|
|
35
35
|
s.license = "MIT"
|
36
36
|
|
37
|
-
|
38
|
-
|
37
|
+
s.signing_key = File.join('/mnt/gem/', 'gem-private_key.pem')
|
38
|
+
s.cert_chain = ['gem-public_cert.pem']
|
39
39
|
end
|
40
40
|
Jeweler::GemcutterTasks.new
|
41
41
|
rescue LoadError
|
data/gem-public_cert.pem
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
2
2
|
MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMQ8wDQYDVQQDDAZkZWxh
|
3
3
|
bm8xGTAXBgoJkiaJk/IsZAEZFglzb2x1dGlvdXMxEzARBgoJkiaJk/IsZAEZFgNj
|
4
|
-
|
4
|
+
b20wHhcNMTQwNDMwMTczNjI2WhcNMTUwNDMwMTczNjI2WjBBMQ8wDQYDVQQDDAZk
|
5
5
|
ZWxhbm8xGTAXBgoJkiaJk/IsZAEZFglzb2x1dGlvdXMxEzARBgoJkiaJk/IsZAEZ
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
6
|
+
FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdbeFjM67+Txrq
|
7
|
+
+8HaD4wKEiacRoB8ps17Vzt9TBUyoMMj5KTtFiptr/+ZTug/YdYBquMprPsKlYM2
|
8
|
+
NoG6BzvDcvQK1zrdHnyVosIDKAHk2wnyN/psZikS1bo9nUHCS5hJdPEnQZx/MxTZ
|
9
|
+
+GjuRsiBxPYBXnqObLhR83LBeWsauWTuo5gJt1DYxDTVrLoB+Z+ceMV+3vh0HBCb
|
10
|
+
iwegkx9GWG45h5wTksUIpzOMB3VsHGtGmBjCvdCgLJ2H6b8U9rmL7chunjdqfNf3
|
11
|
+
zPtnH32c/zrFzeWJTyH2s8Ia+3D6vum2xjjn8FnLg3V4zOf5x598GFBJYDQv7zX/
|
12
|
+
rV9eCzHDAgMBAAGjOTA3MAkGA1UdEwQCMAAwHQYDVR0OBBYEFA+Buc8ySEw2qKnq
|
13
|
+
VH4wh8KAm6hUMAsGA1UdDwQEAwIEsDANBgkqhkiG9w0BAQUFAAOCAQEAYsM0M42h
|
14
|
+
ZEUXvr/i18gkwHKLFDKDAcimgCoS5+syG6rkuSOnKGQolyKTNczNM4gWJJPH5aVq
|
15
|
+
mW2BtqpIom4YRYb9m3fDNNs6kcB5DedY9UPhVvJ8XTTB2YLxLql7UJid9ZOiqWzC
|
16
|
+
OTm06w7zkAT/ldt46p6BqyUy6PW4QMg0Bq7SMfRURVrp2lvhQvBdC7oDR9CGEBZC
|
17
|
+
/Ci++ZEh/QR9qy11AHciEIXnNkytidyZtLr4MWhtbV468y6shpPYdKU/uCINSgvt
|
18
|
+
FpMAM5Nit8L8nHwf3IIUPg7lsMCRzOkQ/FD87BI3V3SnFNoTCdGgnGj3jfW4zRlL
|
19
|
+
iFyareFPA84btQ==
|
20
20
|
-----END CERTIFICATE-----
|
data/lib/net/ssh.rb
CHANGED
@@ -68,7 +68,7 @@ module Net
|
|
68
68
|
:rekey_blocks_limit,:rekey_limit, :rekey_packet_limit, :timeout, :verbose,
|
69
69
|
:global_known_hosts_file, :user_known_hosts_file, :host_key_alias,
|
70
70
|
:host_name, :user, :properties, :passphrase, :keys_only, :max_pkt_size,
|
71
|
-
:max_win_size, :send_env
|
71
|
+
:max_win_size, :send_env, :use_agent
|
72
72
|
]
|
73
73
|
|
74
74
|
# The standard means of starting a new SSH connection. When used with a
|
@@ -115,7 +115,7 @@ module Net
|
|
115
115
|
# be forwarded
|
116
116
|
# * :global_known_hosts_file => the location of the global known hosts
|
117
117
|
# file. Set to an array if you want to specify multiple global known
|
118
|
-
# hosts files. Defaults to %w(/etc/ssh/
|
118
|
+
# hosts files. Defaults to %w(/etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2).
|
119
119
|
# * :hmac => the hmac algorithm (or algorithms) to use
|
120
120
|
# * :host_key => the host key algorithm (or algorithms) to use
|
121
121
|
# * :host_key_alias => the host name to use when looking up or adding a
|
@@ -166,6 +166,8 @@ module Net
|
|
166
166
|
# * :user_known_hosts_file => the location of the user known hosts file.
|
167
167
|
# Set to an array to specify multiple user known hosts files.
|
168
168
|
# Defaults to %w(~/.ssh/known_hosts ~/.ssh/known_hosts2).
|
169
|
+
# * :use_agent => Set false to disable the use of ssh-agent. Defaults to
|
170
|
+
# true
|
169
171
|
# * :verbose => how verbose to be (Logger verbosity constants, Logger::DEBUG
|
170
172
|
# is very verbose, Logger::FATAL is all but silent). Logger::FATAL is the
|
171
173
|
# default. The symbols :debug, :info, :warn, :error, and :fatal are also
|
@@ -77,6 +77,8 @@ module Net; module SSH; module Authentication
|
|
77
77
|
|
78
78
|
if type == SSH2_AGENT_VERSION_RESPONSE
|
79
79
|
raise AgentNotAvailable, "SSH2 agents are not yet supported"
|
80
|
+
elsif type == SSH2_AGENT_FAILURE
|
81
|
+
debug { "Unexpected response type==#{type}, this will be ignored" }
|
80
82
|
elsif type != SSH_AGENT_RSA_IDENTITIES_ANSWER1 && type != SSH_AGENT_RSA_IDENTITIES_ANSWER2
|
81
83
|
raise AgentNotAvailable, "unknown response from agent: #{type}, #{body.to_s.inspect}"
|
82
84
|
end
|
@@ -37,13 +37,13 @@ module Net
|
|
37
37
|
attr_reader :options
|
38
38
|
|
39
39
|
# Create a new KeyManager. By default, the manager will
|
40
|
-
# use the ssh-agent if it is running and the `:
|
41
|
-
# is not
|
40
|
+
# use the ssh-agent if it is running and the `:use_agent` option
|
41
|
+
# is not false.
|
42
42
|
def initialize(logger, options={})
|
43
43
|
self.logger = logger
|
44
44
|
@key_files = []
|
45
45
|
@key_data = []
|
46
|
-
@use_agent = !options[:
|
46
|
+
@use_agent = !(options[:use_agent] == false)
|
47
47
|
@known_identities = {}
|
48
48
|
@agent = nil
|
49
49
|
@options = options
|
@@ -92,8 +92,9 @@ module Net
|
|
92
92
|
# ssh-agent. Note that identities from an ssh-agent are always listed
|
93
93
|
# first in the array, with other identities coming after.
|
94
94
|
#
|
95
|
-
# If key manager was created with :keys_only option,
|
96
|
-
# from ssh-agent will be
|
95
|
+
# If key manager was created with :keys_only option, any identity
|
96
|
+
# from ssh-agent will be ignored unless it present in key_files or
|
97
|
+
# key_data.
|
97
98
|
def each_identity
|
98
99
|
prepared_identities = prepare_identities_from_files + prepare_identities_from_data
|
99
100
|
|
@@ -133,8 +133,8 @@ module Net; module SSH; module Authentication
|
|
133
133
|
# by system default.
|
134
134
|
def default_keys
|
135
135
|
if defined?(OpenSSL::PKey::EC)
|
136
|
-
%w(~/.ssh/
|
137
|
-
|
136
|
+
%w(~/.ssh/id_ed25519 ~/.ssh/id_rsa ~/.ssh/id_dsa ~/.ssh/id_ecdsa
|
137
|
+
~/.ssh2/id_ed25519 ~/.ssh2/id_rsa ~/.ssh2/id_dsa ~/.ssh2/id_ecdsa)
|
138
138
|
else
|
139
139
|
%w(~/.ssh/id_dsa ~/.ssh/id_rsa ~/.ssh2/id_dsa ~/.ssh2/id_rsa)
|
140
140
|
end
|
data/lib/net/ssh/config.rb
CHANGED
@@ -8,7 +8,8 @@ module Net; module SSH
|
|
8
8
|
#
|
9
9
|
# Only a subset of OpenSSH configuration options are understood:
|
10
10
|
#
|
11
|
-
# * ChallengeResponseAuthentication => maps to the :auth_methods option
|
11
|
+
# * ChallengeResponseAuthentication => maps to the :auth_methods option challenge-response (then coleasced into keyboard-interactive)
|
12
|
+
# * KbdInteractiveAuthentication => maps to the :auth_methods keyboard-interactive
|
12
13
|
# * Ciphers => maps to the :encryption option
|
13
14
|
# * Compression => :compression
|
14
15
|
# * CompressionLevel => :compression_level
|
@@ -22,7 +23,7 @@ module Net; module SSH
|
|
22
23
|
# * IdentityFile => maps to the :keys option
|
23
24
|
# * IdentitiesOnly => :keys_only
|
24
25
|
# * Macs => maps to the :hmac option
|
25
|
-
# * PasswordAuthentication => maps to the :auth_methods option
|
26
|
+
# * PasswordAuthentication => maps to the :auth_methods option password
|
26
27
|
# * Port => :port
|
27
28
|
# * PreferredAuthentications => maps to the :auth_methods option
|
28
29
|
# * ProxyCommand => maps to the :proxy option
|
@@ -48,7 +49,7 @@ module Net; module SSH
|
|
48
49
|
def default_files
|
49
50
|
@@default_files
|
50
51
|
end
|
51
|
-
|
52
|
+
|
52
53
|
def default_auth_methods
|
53
54
|
@@default_auth_methods
|
54
55
|
end
|
@@ -58,7 +59,7 @@ module Net; module SSH
|
|
58
59
|
# #default_files), translates the resulting hash into the options
|
59
60
|
# recognized by Net::SSH, and returns them.
|
60
61
|
def for(host, files=default_files)
|
61
|
-
hash = translate(files.inject({}) { |settings, file|
|
62
|
+
hash = translate(files.inject({}) { |settings, file|
|
62
63
|
load(file, host, settings)
|
63
64
|
})
|
64
65
|
end
|
@@ -73,15 +74,13 @@ module Net; module SSH
|
|
73
74
|
file = File.expand_path(path)
|
74
75
|
return settings unless File.readable?(file)
|
75
76
|
|
76
|
-
settings[:auth_methods] ||= default_auth_methods.clone
|
77
|
-
|
78
77
|
globals = {}
|
79
78
|
matched_host = nil
|
80
79
|
multi_host = []
|
81
80
|
seen_host = false
|
82
81
|
IO.foreach(file) do |line|
|
83
82
|
next if line =~ /^\s*(?:#.*)?$/
|
84
|
-
|
83
|
+
|
85
84
|
if line =~ /^\s*(\S+)\s*=(.*)$/
|
86
85
|
key, value = $1, $2
|
87
86
|
else
|
@@ -93,14 +92,14 @@ module Net; module SSH
|
|
93
92
|
|
94
93
|
key.downcase!
|
95
94
|
value = $1 if value =~ /^"(.*)"$/
|
96
|
-
|
95
|
+
|
97
96
|
value = case value.strip
|
98
97
|
when /^\d+$/ then value.to_i
|
99
98
|
when /^no$/i then false
|
100
99
|
when /^yes$/i then true
|
101
100
|
else value
|
102
101
|
end
|
103
|
-
|
102
|
+
|
104
103
|
if key == 'host'
|
105
104
|
# Support "Host host1 host2 hostN".
|
106
105
|
# See http://github.com/net-ssh/net-ssh/issues#issue/6
|
@@ -122,9 +121,9 @@ module Net; module SSH
|
|
122
121
|
end
|
123
122
|
end
|
124
123
|
end
|
125
|
-
|
124
|
+
|
126
125
|
settings = globals.merge(settings) if globals
|
127
|
-
|
126
|
+
|
128
127
|
return settings
|
129
128
|
end
|
130
129
|
|
@@ -133,8 +132,9 @@ module Net; module SSH
|
|
133
132
|
# +settings+ hash must have Strings for keys, all downcased, and
|
134
133
|
# the returned hash will have Symbols for keys.
|
135
134
|
def translate(settings)
|
136
|
-
|
137
|
-
|
135
|
+
auth_methods = default_auth_methods.clone
|
136
|
+
(auth_methods << 'challenge-response').uniq!
|
137
|
+
ret = settings.inject({:auth_methods=>auth_methods}) do |hash, (key, value)|
|
138
138
|
case key
|
139
139
|
when 'bindaddress' then
|
140
140
|
hash[:bind_address] = value
|
@@ -175,6 +175,12 @@ module Net; module SSH
|
|
175
175
|
hash[:auth_methods].delete('password')
|
176
176
|
end
|
177
177
|
when 'challengeresponseauthentication'
|
178
|
+
if value
|
179
|
+
(hash[:auth_methods] << 'challenge-response').uniq!
|
180
|
+
else
|
181
|
+
hash[:auth_methods].delete('challenge-response')
|
182
|
+
end
|
183
|
+
when 'kbdinteractiveauthentication'
|
178
184
|
if value
|
179
185
|
(hash[:auth_methods] << 'keyboard-interactive').uniq!
|
180
186
|
else
|
@@ -183,7 +189,7 @@ module Net; module SSH
|
|
183
189
|
when 'port'
|
184
190
|
hash[:port] = value
|
185
191
|
when 'preferredauthentications'
|
186
|
-
hash[:auth_methods] = value.split(/,/)
|
192
|
+
hash[:auth_methods] = value.split(/,/) # TODO we should place to preferred_auth_methods rather than auth_methods
|
187
193
|
when 'proxycommand'
|
188
194
|
if value and !(value =~ /^none$/)
|
189
195
|
require 'net/ssh/proxy/command'
|
@@ -207,6 +213,7 @@ module Net; module SSH
|
|
207
213
|
end
|
208
214
|
hash
|
209
215
|
end
|
216
|
+
merge_challenge_response_with_keyboard_interactive(ret)
|
210
217
|
end
|
211
218
|
|
212
219
|
private
|
@@ -230,6 +237,14 @@ module Net; module SSH
|
|
230
237
|
else size.to_i
|
231
238
|
end
|
232
239
|
end
|
240
|
+
|
241
|
+
def merge_challenge_response_with_keyboard_interactive(hash)
|
242
|
+
if hash[:auth_methods].include?('challenge-response')
|
243
|
+
hash[:auth_methods].delete('challenge-response')
|
244
|
+
(hash[:auth_methods] << 'keyboard-interactive').uniq!
|
245
|
+
end
|
246
|
+
hash
|
247
|
+
end
|
233
248
|
end
|
234
249
|
end
|
235
250
|
|
data/lib/net/ssh/known_hosts.rb
CHANGED
@@ -15,9 +15,17 @@ module Net; module SSH
|
|
15
15
|
SUPPORTED_TYPE = %w(ssh-rsa ssh-dss
|
16
16
|
ecdsa-sha2-nistp256
|
17
17
|
ecdsa-sha2-nistp384
|
18
|
-
ecdsa-sha2-nistp521
|
18
|
+
ecdsa-sha2-nistp521
|
19
|
+
ssh-ed25519-cert-v01@openssh.com
|
20
|
+
ssh-rsa-cert-v01@openssh.com
|
21
|
+
ssh-rsa-cert-v00@openssh.com
|
22
|
+
ssh-ed25519
|
23
|
+
)
|
19
24
|
else
|
20
|
-
SUPPORTED_TYPE = %w(ssh-rsa ssh-dss
|
25
|
+
SUPPORTED_TYPE = %w(ssh-rsa ssh-dss
|
26
|
+
ssh-rsa-cert-v01@openssh.com
|
27
|
+
ssh-rsa-cert-v00@openssh.com
|
28
|
+
)
|
21
29
|
end
|
22
30
|
|
23
31
|
|
@@ -40,7 +48,7 @@ module Net; module SSH
|
|
40
48
|
# hosts files. If the :user_known_hosts_file key is not set, the
|
41
49
|
# default is returned (~/.ssh/known_hosts and ~/.ssh/known_hosts2). If
|
42
50
|
# :global_known_hosts_file is not set, the default is used
|
43
|
-
# (/etc/ssh/
|
51
|
+
# (/etc/ssh/ssh_known_hosts and /etc/ssh/ssh_known_hosts2).
|
44
52
|
#
|
45
53
|
# If you only want the user known host files, you can pass :user as
|
46
54
|
# the second option.
|
@@ -52,7 +60,7 @@ module Net; module SSH
|
|
52
60
|
end
|
53
61
|
|
54
62
|
if which == :all || which == :global
|
55
|
-
files += Array(options[:global_known_hosts_file] || %w(/etc/ssh/
|
63
|
+
files += Array(options[:global_known_hosts_file] || %w(/etc/ssh/ssh_known_hosts /etc/ssh/ssh_known_hosts2))
|
56
64
|
end
|
57
65
|
|
58
66
|
return files
|
data/lib/net/ssh/test/socket.rb
CHANGED
@@ -22,7 +22,9 @@ module Net; module SSH; module Transport
|
|
22
22
|
# Define the default algorithms, in order of preference, supported by
|
23
23
|
# Net::SSH.
|
24
24
|
ALGORITHMS = {
|
25
|
-
:host_key => %w(ssh-rsa ssh-dss
|
25
|
+
:host_key => %w(ssh-rsa ssh-dss
|
26
|
+
ssh-rsa-cert-v01@openssh.com
|
27
|
+
ssh-rsa-cert-v00@openssh.com),
|
26
28
|
:kex => %w(diffie-hellman-group-exchange-sha1
|
27
29
|
diffie-hellman-group1-sha1
|
28
30
|
diffie-hellman-group14-sha1
|
@@ -40,21 +42,28 @@ module Net; module SSH; module Transport
|
|
40
42
|
camellia192-ctr@openssh.org
|
41
43
|
camellia256-ctr@openssh.org
|
42
44
|
cast128-ctr blowfish-ctr 3des-ctr
|
45
|
+
aes256-gcm@openssh.com aes128-gcm@openssh.com
|
43
46
|
),
|
44
47
|
:hmac => %w(hmac-sha1 hmac-md5 hmac-sha1-96 hmac-md5-96
|
45
48
|
hmac-ripemd160 hmac-ripemd160@openssh.com
|
46
49
|
hmac-sha2-256 hmac-sha2-512 hmac-sha2-256-96
|
47
|
-
hmac-sha2-512-96 none
|
50
|
+
hmac-sha2-512-96 none
|
51
|
+
hmac-sha2-512-etm@openssh.com hmac-sha2-256-etm@openssh.com
|
52
|
+
umac-128-etm@openssh.com),
|
53
|
+
|
48
54
|
:compression => %w(none zlib@openssh.com zlib),
|
49
55
|
:language => %w()
|
50
56
|
}
|
51
57
|
if defined?(OpenSSL::PKey::EC)
|
52
58
|
ALGORITHMS[:host_key] += %w(ecdsa-sha2-nistp256
|
53
59
|
ecdsa-sha2-nistp384
|
54
|
-
ecdsa-sha2-nistp521
|
60
|
+
ecdsa-sha2-nistp521
|
61
|
+
ssh-ed25519-cert-v01@openssh.com
|
62
|
+
ssh-ed25519)
|
55
63
|
ALGORITHMS[:kex] += %w(ecdh-sha2-nistp256
|
56
64
|
ecdh-sha2-nistp384
|
57
|
-
ecdh-sha2-nistp521
|
65
|
+
ecdh-sha2-nistp521
|
66
|
+
curve25519-sha256@libssh.org)
|
58
67
|
end
|
59
68
|
|
60
69
|
# The underlying transport layer session that supports this object
|
data/lib/net/ssh/version.rb
CHANGED
data/net-ssh.gemspec
CHANGED
@@ -5,11 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "net-ssh"
|
8
|
-
s.version = "2.
|
8
|
+
s.version = "2.9.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jamis Buck", "Delano Mandelbaum"]
|
12
|
-
s.
|
12
|
+
s.cert_chain = ["gem-public_cert.pem"]
|
13
|
+
s.date = "2014-04-30"
|
13
14
|
s.description = "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol. It allows you to write programs that invoke and interact with processes on remote servers, via SSH2."
|
14
15
|
s.email = "net-ssh@solutious.com"
|
15
16
|
s.extra_rdoc_files = [
|
@@ -17,6 +18,7 @@ Gem::Specification.new do |s|
|
|
17
18
|
"README.rdoc"
|
18
19
|
]
|
19
20
|
s.files = [
|
21
|
+
".travis.yml",
|
20
22
|
"CHANGES.txt",
|
21
23
|
"LICENSE.txt",
|
22
24
|
"Manifest",
|
@@ -176,6 +178,7 @@ Gem::Specification.new do |s|
|
|
176
178
|
s.require_paths = ["lib"]
|
177
179
|
s.rubyforge_project = "net-ssh"
|
178
180
|
s.rubygems_version = "1.8.23"
|
181
|
+
s.signing_key = "/mnt/gem/gem-private_key.pem"
|
179
182
|
s.summary = "Net::SSH: a pure-Ruby implementation of the SSH2 client protocol."
|
180
183
|
|
181
184
|
if s.respond_to? :specification_version then
|
@@ -30,8 +30,12 @@ module Authentication
|
|
30
30
|
assert !manager.use_agent?
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
34
|
-
assert
|
33
|
+
def test_agent_should_be_used_by_default
|
34
|
+
assert manager().use_agent?
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_agent_should_not_be_used_with_no_agent
|
38
|
+
assert !manager(:use_agent => false).use_agent?
|
35
39
|
end
|
36
40
|
|
37
41
|
def test_each_identity_should_load_from_key_files
|
@@ -101,6 +105,7 @@ module Authentication
|
|
101
105
|
assert_equal rsa.to_blob, identities.first.to_blob
|
102
106
|
|
103
107
|
assert_equal({:from => :agent}, manager.known_identities[rsa])
|
108
|
+
assert manager.use_agent?
|
104
109
|
end
|
105
110
|
|
106
111
|
def test_identities_without_public_key_files_should_not_be_touched_if_identity_loaded_from_agent
|
data/test/configs/auth_off
CHANGED
data/test/test_config.rb
CHANGED
@@ -112,7 +112,8 @@ class TestConfig < Test::Unit::TestCase
|
|
112
112
|
'hostbasedauthentication' => false,
|
113
113
|
'passwordauthentication' => false,
|
114
114
|
'pubkeyauthentication' => false,
|
115
|
-
'challengeresponseauthentication' => false
|
115
|
+
'challengeresponseauthentication' => false,
|
116
|
+
'kbdinteractiveauthentication' => false
|
116
117
|
}
|
117
118
|
|
118
119
|
net_ssh = Net::SSH::Config.translate(open_ssh)
|
@@ -125,7 +126,8 @@ class TestConfig < Test::Unit::TestCase
|
|
125
126
|
'hostbasedauthentication' => true,
|
126
127
|
'passwordauthentication' => true,
|
127
128
|
'pubkeyauthentication' => true,
|
128
|
-
'challengeresponseauthentication' => true
|
129
|
+
'challengeresponseauthentication' => true,
|
130
|
+
'kbdinteractiveauthentication' => true
|
129
131
|
}
|
130
132
|
|
131
133
|
net_ssh = Net::SSH::Config.translate(open_ssh)
|
@@ -133,6 +135,30 @@ class TestConfig < Test::Unit::TestCase
|
|
133
135
|
assert_equal %w(hostbased keyboard-interactive none password publickey), net_ssh[:auth_methods].sort
|
134
136
|
end
|
135
137
|
|
138
|
+
def test_translate_should_not_disable_keyboard_interactive_when_challange_or_keyboardinterective_is_on
|
139
|
+
open_ssh = {
|
140
|
+
'kbdinteractiveauthentication' => false
|
141
|
+
}
|
142
|
+
net_ssh = Net::SSH::Config.translate(open_ssh)
|
143
|
+
assert_equal %w(keyboard-interactive none password publickey), net_ssh[:auth_methods].sort
|
144
|
+
|
145
|
+
open_ssh = {
|
146
|
+
'challengeresponseauthentication' => false
|
147
|
+
}
|
148
|
+
net_ssh = Net::SSH::Config.translate(open_ssh)
|
149
|
+
assert_equal %w(keyboard-interactive none password publickey), net_ssh[:auth_methods].sort
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_should_ddisable_keyboard_interactive_when_challeng_and_keyboardinteractive_is_off
|
153
|
+
open_ssh = {
|
154
|
+
'challengeresponseauthentication' => false,
|
155
|
+
'kbdinteractiveauthentication' => false
|
156
|
+
}
|
157
|
+
|
158
|
+
net_ssh = Net::SSH::Config.translate(open_ssh)
|
159
|
+
assert_equal %w(none password publickey), net_ssh[:auth_methods].sort
|
160
|
+
end
|
161
|
+
|
136
162
|
def test_for_should_turn_off_authentication_methods
|
137
163
|
config = Net::SSH::Config.for("test.host", [config(:empty), config(:auth_off), config(:auth_on)])
|
138
164
|
assert_equal %w(none), config[:auth_methods].sort
|
@@ -18,18 +18,17 @@ module Transport
|
|
18
18
|
|
19
19
|
def test_constructor_should_build_default_list_of_preferred_algorithms
|
20
20
|
if defined?(OpenSSL::PKey::EC)
|
21
|
-
assert_equal %w(ssh-rsa ssh-dss ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521), algorithms[:host_key]
|
22
|
-
assert_equal %w(diffie-hellman-group-exchange-sha1 diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521), algorithms[:kex]
|
21
|
+
assert_equal %w(ssh-rsa ssh-dss ssh-rsa-cert-v01@openssh.com ssh-rsa-cert-v00@openssh.com ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 ssh-ed25519-cert-v01@openssh.com ssh-ed25519), algorithms[:host_key]
|
22
|
+
assert_equal %w(diffie-hellman-group-exchange-sha1 diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 curve25519-sha256@libssh.org), algorithms[:kex]
|
23
23
|
else
|
24
|
-
assert_equal %w(ssh-rsa ssh-dss), algorithms[:host_key]
|
25
|
-
assert_equal %w(diffie-hellman-group-exchange-sha1 diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group-exchange-sha256), algorithms[:kex]
|
24
|
+
assert_equal %w(ssh-rsa ssh-dss ssh-rsa-cert-v01@openssh.com ssh-rsa-cert-v00@openssh.com), algorithms[:host_key]
|
25
|
+
assert_equal %w(diffie-hellman-group-exchange-sha1 diffie-hellman-group1-sha1 diffie-hellman-group14-sha1 diffie-hellman-group-exchange-sha256 aes256-gcm@openssh.com aes128-gcm@openssh.com), algorithms[:kex]
|
26
26
|
end
|
27
|
-
assert_equal %w(aes128-cbc 3des-cbc blowfish-cbc cast128-cbc aes192-cbc aes256-cbc rijndael-cbc@lysator.liu.se idea-cbc none arcfour128 arcfour256 arcfour aes128-ctr aes192-ctr aes256-ctr camellia128-cbc camellia192-cbc camellia256-cbc camellia128-cbc@openssh.org camellia192-cbc@openssh.org camellia256-cbc@openssh.org camellia128-ctr camellia192-ctr camellia256-ctr camellia128-ctr@openssh.org camellia192-ctr@openssh.org camellia256-ctr@openssh.org cast128-ctr blowfish-ctr 3des-ctr), algorithms[:encryption]
|
27
|
+
assert_equal %w(aes128-cbc 3des-cbc blowfish-cbc cast128-cbc aes192-cbc aes256-cbc rijndael-cbc@lysator.liu.se idea-cbc none arcfour128 arcfour256 arcfour aes128-ctr aes192-ctr aes256-ctr camellia128-cbc camellia192-cbc camellia256-cbc camellia128-cbc@openssh.org camellia192-cbc@openssh.org camellia256-cbc@openssh.org camellia128-ctr camellia192-ctr camellia256-ctr camellia128-ctr@openssh.org camellia192-ctr@openssh.org camellia256-ctr@openssh.org cast128-ctr blowfish-ctr 3des-ctr aes256-gcm@openssh.com aes128-gcm@openssh.com), algorithms[:encryption]
|
28
28
|
if defined?(OpenSSL::Digest::SHA256)
|
29
|
-
assert_equal %w(hmac-sha1 hmac-md5 hmac-sha1-96 hmac-md5-96 hmac-ripemd160 hmac-ripemd160@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha2-256-96 hmac-sha2-512-96 none), algorithms[:hmac]
|
29
|
+
assert_equal %w(hmac-sha1 hmac-md5 hmac-sha1-96 hmac-md5-96 hmac-ripemd160 hmac-ripemd160@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha2-256-96 hmac-sha2-512-96 none hmac-sha2-512-etm@openssh.com hmac-sha2-256-etm@openssh.com umac-128-etm@openssh.com), algorithms[:hmac]
|
30
30
|
else
|
31
|
-
assert_equal %w(hmac-sha1 hmac-md5 hmac-sha1-96 hmac-md5-96 hmac-ripemd160 hmac-ripemd160@openssh.com none), algorithms[:hmac]
|
32
|
-
end
|
31
|
+
assert_equal %w(hmac-sha1 hmac-md5 hmac-sha1-96 hmac-md5-96 hmac-ripemd160 hmac-ripemd160@openssh.com none umac-128-etm@openssh.com), algorithms[:hmac] end
|
33
32
|
assert_equal %w(none zlib@openssh.com zlib), algorithms[:compression]
|
34
33
|
assert_equal %w(), algorithms[:language]
|
35
34
|
end
|
@@ -43,16 +42,16 @@ module Transport
|
|
43
42
|
|
44
43
|
def test_constructor_with_preferred_host_key_type_should_put_preferred_host_key_type_first
|
45
44
|
if defined?(OpenSSL::PKey::EC)
|
46
|
-
assert_equal %w(ssh-dss ssh-rsa ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521), algorithms(:host_key => "ssh-dss")[:host_key]
|
45
|
+
assert_equal %w(ssh-dss ssh-rsa ssh-rsa-cert-v01@openssh.com ssh-rsa-cert-v00@openssh.com ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 ssh-ed25519-cert-v01@openssh.com ssh-ed25519), algorithms(:host_key => "ssh-dss")[:host_key]
|
47
46
|
else
|
48
|
-
assert_equal %w(ssh-dss ssh-rsa), algorithms(:host_key => "ssh-dss")[:host_key]
|
47
|
+
assert_equal %w(ssh-dss ssh-rsa ssh-rsa-cert-v01@openssh.com ssh-rsa-cert-v00@openssh.com), algorithms(:host_key => "ssh-dss")[:host_key]
|
49
48
|
end
|
50
49
|
end
|
51
50
|
|
52
51
|
def test_constructor_with_known_hosts_reporting_known_host_key_should_use_that_host_key_type
|
53
52
|
Net::SSH::KnownHosts.expects(:search_for).with("net.ssh.test,127.0.0.1", {}).returns([stub("key", :ssh_type => "ssh-dss")])
|
54
53
|
if defined?(OpenSSL::PKey::EC)
|
55
|
-
assert_equal %w(ssh-dss ssh-rsa ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521), algorithms[:host_key]
|
54
|
+
assert_equal %w(ssh-dss ssh-rsa ssh-rsa-cert-v01@openssh.com ssh-rsa-cert-v00@openssh.com ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 ssh-ed25519-cert-v01@openssh.com ssh-ed25519), algorithms[:host_key]
|
56
55
|
else
|
57
56
|
assert_equal %w(ssh-dss ssh-rsa), algorithms[:host_key]
|
58
57
|
end
|
@@ -64,7 +63,7 @@ module Transport
|
|
64
63
|
|
65
64
|
def test_constructor_with_preferred_kex_should_put_preferred_kex_first
|
66
65
|
if defined?(OpenSSL::PKey::EC)
|
67
|
-
assert_equal %w(diffie-hellman-group1-sha1 diffie-hellman-group-exchange-sha1 diffie-hellman-group14-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521), algorithms(:kex => "diffie-hellman-group1-sha1")[:kex]
|
66
|
+
assert_equal %w(diffie-hellman-group1-sha1 diffie-hellman-group-exchange-sha1 diffie-hellman-group14-sha1 diffie-hellman-group-exchange-sha256 ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 curve25519-sha256@libssh.org), algorithms(:kex => "diffie-hellman-group1-sha1")[:kex]
|
68
67
|
else
|
69
68
|
assert_equal %w(diffie-hellman-group1-sha1 diffie-hellman-group-exchange-sha1 diffie-hellman-group14-sha1 diffie-hellman-group-exchange-sha256), algorithms(:kex => "diffie-hellman-group1-sha1")[:kex]
|
70
69
|
end
|
@@ -75,11 +74,11 @@ module Transport
|
|
75
74
|
end
|
76
75
|
|
77
76
|
def test_constructor_with_preferred_encryption_should_put_preferred_encryption_first
|
78
|
-
assert_equal %w(aes256-cbc aes128-cbc 3des-cbc blowfish-cbc cast128-cbc aes192-cbc rijndael-cbc@lysator.liu.se idea-cbc none arcfour128 arcfour256 arcfour aes128-ctr aes192-ctr aes256-ctr camellia128-cbc camellia192-cbc camellia256-cbc camellia128-cbc@openssh.org camellia192-cbc@openssh.org camellia256-cbc@openssh.org camellia128-ctr camellia192-ctr camellia256-ctr camellia128-ctr@openssh.org camellia192-ctr@openssh.org camellia256-ctr@openssh.org cast128-ctr blowfish-ctr 3des-ctr), algorithms(:encryption => "aes256-cbc")[:encryption]
|
77
|
+
assert_equal %w(aes256-cbc aes128-cbc 3des-cbc blowfish-cbc cast128-cbc aes192-cbc rijndael-cbc@lysator.liu.se idea-cbc none arcfour128 arcfour256 arcfour aes128-ctr aes192-ctr aes256-ctr camellia128-cbc camellia192-cbc camellia256-cbc camellia128-cbc@openssh.org camellia192-cbc@openssh.org camellia256-cbc@openssh.org camellia128-ctr camellia192-ctr camellia256-ctr camellia128-ctr@openssh.org camellia192-ctr@openssh.org camellia256-ctr@openssh.org cast128-ctr blowfish-ctr 3des-ctr aes256-gcm@openssh.com aes128-gcm@openssh.com), algorithms(:encryption => "aes256-cbc")[:encryption]
|
79
78
|
end
|
80
79
|
|
81
80
|
def test_constructor_with_multiple_preferred_encryption_should_put_all_preferred_encryption_first
|
82
|
-
assert_equal %w(aes256-cbc 3des-cbc idea-cbc aes128-cbc blowfish-cbc cast128-cbc aes192-cbc rijndael-cbc@lysator.liu.se none arcfour128 arcfour256 arcfour aes128-ctr aes192-ctr aes256-ctr camellia128-cbc camellia192-cbc camellia256-cbc camellia128-cbc@openssh.org camellia192-cbc@openssh.org camellia256-cbc@openssh.org camellia128-ctr camellia192-ctr camellia256-ctr camellia128-ctr@openssh.org camellia192-ctr@openssh.org camellia256-ctr@openssh.org cast128-ctr blowfish-ctr 3des-ctr), algorithms(:encryption => %w(aes256-cbc 3des-cbc idea-cbc))[:encryption]
|
81
|
+
assert_equal %w(aes256-cbc 3des-cbc idea-cbc aes128-cbc blowfish-cbc cast128-cbc aes192-cbc rijndael-cbc@lysator.liu.se none arcfour128 arcfour256 arcfour aes128-ctr aes192-ctr aes256-ctr camellia128-cbc camellia192-cbc camellia256-cbc camellia128-cbc@openssh.org camellia192-cbc@openssh.org camellia256-cbc@openssh.org camellia128-ctr camellia192-ctr camellia256-ctr camellia128-ctr@openssh.org camellia192-ctr@openssh.org camellia256-ctr@openssh.org cast128-ctr blowfish-ctr 3des-ctr aes256-gcm@openssh.com aes128-gcm@openssh.com), algorithms(:encryption => %w(aes256-cbc 3des-cbc idea-cbc))[:encryption]
|
83
82
|
end
|
84
83
|
|
85
84
|
def test_constructor_with_unrecognized_encryption_should_raise_exception
|
@@ -87,11 +86,11 @@ module Transport
|
|
87
86
|
end
|
88
87
|
|
89
88
|
def test_constructor_with_preferred_hmac_should_put_preferred_hmac_first
|
90
|
-
assert_equal %w(hmac-md5-96 hmac-sha1 hmac-md5 hmac-sha1-96 hmac-ripemd160 hmac-ripemd160@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha2-256-96 hmac-sha2-512-96 none), algorithms(:hmac => "hmac-md5-96")[:hmac]
|
89
|
+
assert_equal %w(hmac-md5-96 hmac-sha1 hmac-md5 hmac-sha1-96 hmac-ripemd160 hmac-ripemd160@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha2-256-96 hmac-sha2-512-96 none hmac-sha2-512-etm@openssh.com hmac-sha2-256-etm@openssh.com umac-128-etm@openssh.com), algorithms(:hmac => "hmac-md5-96")[:hmac]
|
91
90
|
end
|
92
91
|
|
93
92
|
def test_constructor_with_multiple_preferred_hmac_should_put_all_preferred_hmac_first
|
94
|
-
assert_equal %w(hmac-md5-96 hmac-sha1-96 hmac-sha1 hmac-md5
|
93
|
+
assert_equal %w(hmac-md5-96 hmac-sha1-96 hmac-sha1 hmac-md5 hmac-ripemd160 hmac-ripemd160@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha2-256-96 hmac-sha2-512-96 none hmac-sha2-512-etm@openssh.com hmac-sha2-256-etm@openssh.com umac-128-etm@openssh.com), algorithms(:hmac => %w(hmac-md5-96 hmac-sha1-96))[:hmac]
|
95
94
|
end
|
96
95
|
|
97
96
|
def test_constructor_with_unrecognized_hmac_should_raise_exception
|
@@ -290,16 +289,16 @@ module Transport
|
|
290
289
|
assert_equal KEXINIT, buffer.type
|
291
290
|
assert_equal 16, buffer.read(16).length
|
292
291
|
if defined?(OpenSSL::PKey::EC)
|
293
|
-
assert_equal options[:kex] || "diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521", buffer.read_string
|
294
|
-
assert_equal options[:host_key] || "ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521", buffer.read_string
|
292
|
+
assert_equal options[:kex] || "diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,curve25519-sha256@libssh.org", buffer.read_string
|
293
|
+
assert_equal options[:host_key] || "ssh-rsa,ssh-dss,ssh-rsa-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519-cert-v01@openssh.com,ssh-ed25519", buffer.read_string
|
295
294
|
else
|
296
295
|
assert_equal options[:kex] || "diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256", buffer.read_string
|
297
296
|
assert_equal options[:host_key] || "ssh-rsa,ssh-dss", buffer.read_string
|
298
297
|
end
|
299
|
-
assert_equal options[:encryption_client] || "aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,idea-cbc,none,arcfour128,arcfour256,arcfour,aes128-ctr,aes192-ctr,aes256-ctr,camellia128-cbc,camellia192-cbc,camellia256-cbc,camellia128-cbc@openssh.org,camellia192-cbc@openssh.org,camellia256-cbc@openssh.org,camellia128-ctr,camellia192-ctr,camellia256-ctr,camellia128-ctr@openssh.org,camellia192-ctr@openssh.org,camellia256-ctr@openssh.org,cast128-ctr,blowfish-ctr,3des-ctr", buffer.read_string
|
300
|
-
assert_equal options[:encryption_server] || "aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,idea-cbc,none,arcfour128,arcfour256,arcfour,aes128-ctr,aes192-ctr,aes256-ctr,camellia128-cbc,camellia192-cbc,camellia256-cbc,camellia128-cbc@openssh.org,camellia192-cbc@openssh.org,camellia256-cbc@openssh.org,camellia128-ctr,camellia192-ctr,camellia256-ctr,camellia128-ctr@openssh.org,camellia192-ctr@openssh.org,camellia256-ctr@openssh.org,cast128-ctr,blowfish-ctr,3des-ctr", buffer.read_string
|
301
|
-
assert_equal options[:hmac_client] || "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha2-256-96,hmac-sha2-512-96,none", buffer.read_string
|
302
|
-
assert_equal options[:hmac_server] || "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha2-256-96,hmac-sha2-512-96,none", buffer.read_string
|
298
|
+
assert_equal options[:encryption_client] || "aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,idea-cbc,none,arcfour128,arcfour256,arcfour,aes128-ctr,aes192-ctr,aes256-ctr,camellia128-cbc,camellia192-cbc,camellia256-cbc,camellia128-cbc@openssh.org,camellia192-cbc@openssh.org,camellia256-cbc@openssh.org,camellia128-ctr,camellia192-ctr,camellia256-ctr,camellia128-ctr@openssh.org,camellia192-ctr@openssh.org,camellia256-ctr@openssh.org,cast128-ctr,blowfish-ctr,3des-ctr,aes256-gcm@openssh.com,aes128-gcm@openssh.com", buffer.read_string
|
299
|
+
assert_equal options[:encryption_server] || "aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,idea-cbc,none,arcfour128,arcfour256,arcfour,aes128-ctr,aes192-ctr,aes256-ctr,camellia128-cbc,camellia192-cbc,camellia256-cbc,camellia128-cbc@openssh.org,camellia192-cbc@openssh.org,camellia256-cbc@openssh.org,camellia128-ctr,camellia192-ctr,camellia256-ctr,camellia128-ctr@openssh.org,camellia192-ctr@openssh.org,camellia256-ctr@openssh.org,cast128-ctr,blowfish-ctr,3des-ctr,aes256-gcm@openssh.com,aes128-gcm@openssh.com", buffer.read_string
|
300
|
+
assert_equal options[:hmac_client] || "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha2-256-96,hmac-sha2-512-96,none,hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com", buffer.read_string
|
301
|
+
assert_equal options[:hmac_server] || "hmac-sha1,hmac-md5,hmac-sha1-96,hmac-md5-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha2-256-96,hmac-sha2-512-96,none,hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com", buffer.read_string
|
303
302
|
assert_equal options[:compression_client] || "none,zlib@openssh.com,zlib", buffer.read_string
|
304
303
|
assert_equal options[:compression_server] || "none,zlib@openssh.com,zlib", buffer.read_string
|
305
304
|
assert_equal options[:language_client] || "", buffer.read_string
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-ssh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.9.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,36 @@ authors:
|
|
9
9
|
- Delano Mandelbaum
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
|
-
cert_chain:
|
13
|
-
|
12
|
+
cert_chain:
|
13
|
+
- !binary |-
|
14
|
+
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUROakNDQWg2Z0F3SUJB
|
15
|
+
Z0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREJCTVE4d0RRWURWUVFEREFaa1pX
|
16
|
+
eGgKYm04eEdUQVhCZ29Ka2lhSmsvSXNaQUVaRmdsemIyeDFkR2x2ZFhNeEV6
|
17
|
+
QVJCZ29Ka2lhSmsvSXNaQUVaRmdOagpiMjB3SGhjTk1UUXdORE13TVRjek5q
|
18
|
+
STJXaGNOTVRVd05ETXdNVGN6TmpJMldqQkJNUTh3RFFZRFZRUUREQVprClpX
|
19
|
+
eGhibTh4R1RBWEJnb0praWFKay9Jc1pBRVpGZ2x6YjJ4MWRHbHZkWE14RXpB
|
20
|
+
UkJnb0praWFKay9Jc1pBRVoKRmdOamIyMHdnZ0VpTUEwR0NTcUdTSWIzRFFF
|
21
|
+
QkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEZGJlRmpNNjcrVHhycQorOEhhRDR3
|
22
|
+
S0VpYWNSb0I4cHMxN1Z6dDlUQlV5b01NajVLVHRGaXB0ci8rWlR1Zy9ZZFlC
|
23
|
+
cXVNcHJQc0tsWU0yCk5vRzZCenZEY3ZRSzF6cmRIbnlWb3NJREtBSGsyd255
|
24
|
+
Ti9wc1ppa1MxYm85blVIQ1M1aEpkUEVuUVp4L014VFoKK0dqdVJzaUJ4UFlC
|
25
|
+
WG5xT2JMaFI4M0xCZVdzYXVXVHVvNWdKdDFEWXhEVFZyTG9CK1orY2VNVisz
|
26
|
+
dmgwSEJDYgppd2Vna3g5R1dHNDVoNXdUa3NVSXB6T01CM1ZzSEd0R21CakN2
|
27
|
+
ZENnTEoySDZiOFU5cm1MN2NodW5qZHFmTmYzCnpQdG5IMzJjL3pyRnplV0pU
|
28
|
+
eUgyczhJYSszRDZ2dW0yeGpqbjhGbkxnM1Y0ek9mNXg1OThHRkJKWURRdjd6
|
29
|
+
WC8KclY5ZUN6SERBZ01CQUFHak9UQTNNQWtHQTFVZEV3UUNNQUF3SFFZRFZS
|
30
|
+
ME9CQllFRkErQnVjOHlTRXcycUtucQpWSDR3aDhLQW02aFVNQXNHQTFVZER3
|
31
|
+
UUVBd0lFc0RBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQVlzTTBNNDJoClpF
|
32
|
+
VVh2ci9pMThna3dIS0xGREtEQWNpbWdDb1M1K3N5RzZya3VTT25LR1FvbHlL
|
33
|
+
VE5jek5NNGdXSkpQSDVhVnEKbVcyQnRxcElvbTRZUlliOW0zZkROTnM2a2NC
|
34
|
+
NURlZFk5VVBoVnZKOFhUVEIyWUx4THFsN1VKaWQ5Wk9pcVd6QwpPVG0wNnc3
|
35
|
+
emtBVC9sZHQ0NnA2QnF5VXk2UFc0UU1nMEJxN1NNZlJVUlZycDJsdmhRdkJk
|
36
|
+
QzdvRFI5Q0dFQlpDCi9DaSsrWkVoL1FSOXF5MTFBSGNpRUlYbk5reXRpZHla
|
37
|
+
dExyNE1XaHRiVjQ2OHk2c2hwUFlkS1UvdUNJTlNndnQKRnBNQU01Tml0OEw4
|
38
|
+
bkh3ZjNJSVVQZzdsc01DUnpPa1EvRkQ4N0JJM1YzU25GTm9UQ2RHZ25HajNq
|
39
|
+
Zlc0elJsTAppRnlhcmVGUEE4NGJ0UT09Ci0tLS0tRU5EIENFUlRJRklDQVRF
|
40
|
+
LS0tLS0K
|
41
|
+
date: 2014-04-30 00:00:00.000000000 Z
|
14
42
|
dependencies:
|
15
43
|
- !ruby/object:Gem::Dependency
|
16
44
|
name: test-unit
|
@@ -54,6 +82,7 @@ extra_rdoc_files:
|
|
54
82
|
- LICENSE.txt
|
55
83
|
- README.rdoc
|
56
84
|
files:
|
85
|
+
- .travis.yml
|
57
86
|
- CHANGES.txt
|
58
87
|
- LICENSE.txt
|
59
88
|
- Manifest
|
metadata.gz.sig
ADDED
Binary file
|