net-ssh 2.0.8 → 2.0.9
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.
- data/CHANGELOG.rdoc +13 -0
- data/lib/net/ssh.rb +2 -1
- data/lib/net/ssh/authentication/key_manager.rb +13 -4
- data/lib/net/ssh/connection/session.rb +20 -2
- data/lib/net/ssh/transport/session.rb +10 -1
- data/lib/net/ssh/version.rb +1 -1
- data/net-ssh.gemspec +2 -2
- data/test/authentication/test_key_manager.rb +4 -3
- data/test/connection/test_session.rb +6 -1
- metadata +2 -2
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
=== 2.0.9 / 1 Feb 2009
|
2
|
+
|
3
|
+
* Specifying non-nil user argument overrides user in .ssh/config [Jamis Buck]
|
4
|
+
|
5
|
+
* Ignore requests for non-existent channels (workaround ssh server bug) [Jamis Buck]
|
6
|
+
|
7
|
+
* Add terminate! method for hard shutdown scenarios [Jamis Buck]
|
8
|
+
|
9
|
+
* Revert to pre-2.0.7 key-loading behavior by default, but load private-key if public-key doesn't exist [Jamis Buck]
|
10
|
+
|
11
|
+
* Make sure :passphrase option gets passed to key manager [Bob Cotton]
|
12
|
+
|
13
|
+
|
1
14
|
=== 2.0.8 / 29 December 2008
|
2
15
|
|
3
16
|
* Fix private key change from 2.0.7 so that keys are loaded just-in-time, avoiding unecessary prompts from encrypted keys. [Jamis Buck]
|
data/lib/net/ssh.rb
CHANGED
@@ -159,6 +159,7 @@ module Net
|
|
159
159
|
else Array(options[:config])
|
160
160
|
end
|
161
161
|
|
162
|
+
options[:user] = user if user
|
162
163
|
options = Net::SSH::Config.for(host, files).merge(options)
|
163
164
|
host = options.fetch(:host_name, host)
|
164
165
|
|
@@ -196,4 +197,4 @@ module Net
|
|
196
197
|
end
|
197
198
|
end
|
198
199
|
end
|
199
|
-
end
|
200
|
+
end
|
@@ -88,14 +88,23 @@ module Net
|
|
88
88
|
end
|
89
89
|
|
90
90
|
key_files.each do |file|
|
91
|
-
|
91
|
+
public_key_file = file + ".pub"
|
92
|
+
if File.readable?(public_key_file)
|
92
93
|
begin
|
93
|
-
|
94
|
-
key = private_key.send :public_key
|
94
|
+
key = KeyFactory.load_public_key(public_key_file)
|
95
95
|
known_identities[key] = { :from => :file, :file => file }
|
96
96
|
yield key
|
97
97
|
rescue Exception => e
|
98
|
-
error { "could not load public key file `#{
|
98
|
+
error { "could not load public key file `#{public_key_file}': #{e.class} (#{e.message})" }
|
99
|
+
end
|
100
|
+
elsif File.readable?(file)
|
101
|
+
begin
|
102
|
+
private_key = KeyFactory.load_private_key(file, options[:passphrase])
|
103
|
+
key = private_key.send(:public_key)
|
104
|
+
known_identities[key] = { :from => :file, :file => file, :key => private_key }
|
105
|
+
yield key
|
106
|
+
rescue Exception => e
|
107
|
+
error { "could not load private key file `#{file}': #{e.class} (#{e.message})" }
|
99
108
|
end
|
100
109
|
end
|
101
110
|
end
|
@@ -46,6 +46,16 @@ module Net; module SSH; module Connection
|
|
46
46
|
# The list of callbacks for pending requests. See #send_global_request.
|
47
47
|
attr_reader :pending_requests #:nodoc:
|
48
48
|
|
49
|
+
class NilChannel
|
50
|
+
def initialize(session)
|
51
|
+
@session = session
|
52
|
+
end
|
53
|
+
|
54
|
+
def method_missing(sym, *args)
|
55
|
+
@session.lwarn { "ignoring request #{sym.inspect} for non-existent (closed?) channel; probably ssh server bug" }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
49
59
|
# Create a new connection service instance atop the given transport
|
50
60
|
# layer. Initializes the listeners to be only the underlying socket object.
|
51
61
|
def initialize(transport, options={})
|
@@ -55,7 +65,7 @@ module Net; module SSH; module Connection
|
|
55
65
|
@options = options
|
56
66
|
|
57
67
|
@channel_id_counter = -1
|
58
|
-
@channels =
|
68
|
+
@channels = Hash.new(NilChannel.new(self))
|
59
69
|
@listeners = { transport.socket => nil }
|
60
70
|
@pending_requests = []
|
61
71
|
@channel_open_handlers = {}
|
@@ -100,6 +110,14 @@ module Net; module SSH; module Connection
|
|
100
110
|
transport.close
|
101
111
|
end
|
102
112
|
|
113
|
+
# Performs a "hard" shutdown of the connection. In general, this should
|
114
|
+
# never be done, but it might be necessary (in a rescue clause, for instance,
|
115
|
+
# when the connection needs to close but you don't know the status of the
|
116
|
+
# underlying protocol's state).
|
117
|
+
def shutdown!
|
118
|
+
transport.shutdown!
|
119
|
+
end
|
120
|
+
|
103
121
|
# preserve a reference to Kernel#loop
|
104
122
|
alias :loop_forever :loop
|
105
123
|
|
@@ -575,4 +593,4 @@ module Net; module SSH; module Connection
|
|
575
593
|
end
|
576
594
|
end
|
577
595
|
|
578
|
-
end; end; end
|
596
|
+
end; end; end
|
@@ -104,6 +104,15 @@ module Net; module SSH; module Transport
|
|
104
104
|
socket.close
|
105
105
|
end
|
106
106
|
|
107
|
+
# Performs a "hard" shutdown of the connection. In general, this should
|
108
|
+
# never be done, but it might be necessary (in a rescue clause, for instance,
|
109
|
+
# when the connection needs to close but you don't know the status of the
|
110
|
+
# underlying protocol's state).
|
111
|
+
def shutdown!
|
112
|
+
error { "forcing connection closed" }
|
113
|
+
socket.close
|
114
|
+
end
|
115
|
+
|
107
116
|
# Returns a new service_request packet for the given service name, ready
|
108
117
|
# for sending to the server.
|
109
118
|
def service_request(service)
|
@@ -264,4 +273,4 @@ module Net; module SSH; module Transport
|
|
264
273
|
end
|
265
274
|
end
|
266
275
|
end
|
267
|
-
end; end; end
|
276
|
+
end; end; end
|
data/lib/net/ssh/version.rb
CHANGED
data/net-ssh.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{net-ssh}
|
3
|
-
s.version = "2.0.
|
3
|
+
s.version = "2.0.9"
|
4
4
|
|
5
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
6
6
|
s.authors = ["Jamis Buck"]
|
7
|
-
s.date = %q{
|
7
|
+
s.date = %q{2009-02-01}
|
8
8
|
s.description = %q{a pure-Ruby implementation of the SSH2 client protocol}
|
9
9
|
s.email = %q{jamis@jamisbuck.org}
|
10
10
|
s.extra_rdoc_files = ["CHANGELOG.rdoc", "lib/net/ssh/authentication/agent.rb", "lib/net/ssh/authentication/constants.rb", "lib/net/ssh/authentication/key_manager.rb", "lib/net/ssh/authentication/methods/abstract.rb", "lib/net/ssh/authentication/methods/hostbased.rb", "lib/net/ssh/authentication/methods/keyboard_interactive.rb", "lib/net/ssh/authentication/methods/password.rb", "lib/net/ssh/authentication/methods/publickey.rb", "lib/net/ssh/authentication/pageant.rb", "lib/net/ssh/authentication/session.rb", "lib/net/ssh/buffer.rb", "lib/net/ssh/buffered_io.rb", "lib/net/ssh/config.rb", "lib/net/ssh/connection/channel.rb", "lib/net/ssh/connection/constants.rb", "lib/net/ssh/connection/session.rb", "lib/net/ssh/connection/term.rb", "lib/net/ssh/errors.rb", "lib/net/ssh/key_factory.rb", "lib/net/ssh/known_hosts.rb", "lib/net/ssh/loggable.rb", "lib/net/ssh/packet.rb", "lib/net/ssh/prompt.rb", "lib/net/ssh/proxy/errors.rb", "lib/net/ssh/proxy/http.rb", "lib/net/ssh/proxy/socks4.rb", "lib/net/ssh/proxy/socks5.rb", "lib/net/ssh/ruby_compat.rb", "lib/net/ssh/service/forward.rb", "lib/net/ssh/test/channel.rb", "lib/net/ssh/test/extensions.rb", "lib/net/ssh/test/kex.rb", "lib/net/ssh/test/local_packet.rb", "lib/net/ssh/test/packet.rb", "lib/net/ssh/test/remote_packet.rb", "lib/net/ssh/test/script.rb", "lib/net/ssh/test/socket.rb", "lib/net/ssh/test.rb", "lib/net/ssh/transport/algorithms.rb", "lib/net/ssh/transport/cipher_factory.rb", "lib/net/ssh/transport/constants.rb", "lib/net/ssh/transport/hmac/abstract.rb", "lib/net/ssh/transport/hmac/md5.rb", "lib/net/ssh/transport/hmac/md5_96.rb", "lib/net/ssh/transport/hmac/none.rb", "lib/net/ssh/transport/hmac/sha1.rb", "lib/net/ssh/transport/hmac/sha1_96.rb", "lib/net/ssh/transport/hmac.rb", "lib/net/ssh/transport/identity_cipher.rb", "lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb", "lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb", "lib/net/ssh/transport/kex.rb", "lib/net/ssh/transport/openssl.rb", "lib/net/ssh/transport/packet_stream.rb", "lib/net/ssh/transport/server_version.rb", "lib/net/ssh/transport/session.rb", "lib/net/ssh/transport/state.rb", "lib/net/ssh/verifiers/lenient.rb", "lib/net/ssh/verifiers/null.rb", "lib/net/ssh/verifiers/strict.rb", "lib/net/ssh/version.rb", "lib/net/ssh.rb", "README.rdoc", "THANKS.rdoc"]
|
@@ -41,8 +41,8 @@ module Authentication
|
|
41
41
|
assert_equal rsa.to_blob, identities.first.to_blob
|
42
42
|
assert_equal dsa.to_blob, identities.last.to_blob
|
43
43
|
|
44
|
-
assert_equal({:from => :file, :file => "/first"}, manager.known_identities[rsa])
|
45
|
-
assert_equal({:from => :file, :file => "/second"}, manager.known_identities[dsa])
|
44
|
+
assert_equal({:from => :file, :file => "/first", :key => rsa}, manager.known_identities[rsa])
|
45
|
+
assert_equal({:from => :file, :file => "/second", :key => dsa}, manager.known_identities[dsa])
|
46
46
|
end
|
47
47
|
|
48
48
|
def test_identities_should_load_from_agent
|
@@ -78,7 +78,8 @@ module Authentication
|
|
78
78
|
|
79
79
|
def stub_file_key(name, key, also_private=false)
|
80
80
|
manager.add(name)
|
81
|
-
File.expects(:readable?).returns(true)
|
81
|
+
File.expects(:readable?).with(name).returns(true)
|
82
|
+
File.expects(:readable?).with(name + ".pub").returns(false)
|
82
83
|
Net::SSH::KeyFactory.expects(:load_private_key).with(name, nil).returns(key).at_least_once
|
83
84
|
key.expects(:public_key).returns(key)
|
84
85
|
end
|
@@ -257,6 +257,11 @@ module Connection
|
|
257
257
|
process_times(2)
|
258
258
|
end
|
259
259
|
|
260
|
+
def test_channel_request_for_nonexistant_channel_should_be_ignored
|
261
|
+
transport.return(CHANNEL_REQUEST, :long, 14, :string, "testing", :bool, false)
|
262
|
+
assert_nothing_raised { process_times(2) }
|
263
|
+
end
|
264
|
+
|
260
265
|
def test_channel_request_packet_should_be_routed_to_corresponding_channel
|
261
266
|
channel_at(14).expects(:do_request).with("testing", false, Net::SSH::Buffer.new)
|
262
267
|
transport.return(CHANNEL_REQUEST, :long, 14, :string, "testing", :bool, false)
|
@@ -480,4 +485,4 @@ module Connection
|
|
480
485
|
end
|
481
486
|
end
|
482
487
|
|
483
|
-
end
|
488
|
+
end
|
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.0.
|
4
|
+
version: 2.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamis Buck
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-02-01 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|