net-ssh 1.1.4 → 2.0.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.
- data/CHANGELOG.rdoc +37 -0
- data/Manifest +101 -0
- data/README.rdoc +110 -0
- data/Rakefile +26 -0
- data/{THANKS → THANKS.rdoc} +2 -5
- data/lib/net/ssh.rb +189 -57
- data/lib/net/ssh/authentication/agent.rb +175 -0
- data/lib/net/ssh/authentication/constants.rb +18 -0
- data/lib/net/ssh/authentication/key_manager.rb +166 -0
- data/lib/net/ssh/authentication/methods/abstract.rb +60 -0
- data/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
- data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
- data/lib/net/ssh/authentication/methods/password.rb +39 -0
- data/lib/net/ssh/authentication/methods/publickey.rb +92 -0
- data/lib/net/ssh/authentication/pageant.rb +176 -0
- data/lib/net/ssh/authentication/session.rb +116 -0
- data/lib/net/ssh/buffer.rb +339 -0
- data/lib/net/ssh/buffered_io.rb +149 -0
- data/lib/net/ssh/config.rb +173 -0
- data/lib/net/ssh/connection/channel.rb +575 -454
- data/lib/net/ssh/connection/constants.rb +31 -45
- data/lib/net/ssh/connection/session.rb +569 -0
- data/lib/net/ssh/connection/term.rb +176 -88
- data/lib/net/ssh/errors.rb +83 -61
- data/lib/net/ssh/key_factory.rb +85 -0
- data/lib/net/ssh/known_hosts.rb +129 -0
- data/lib/net/ssh/loggable.rb +61 -0
- data/lib/net/ssh/packet.rb +102 -0
- data/lib/net/ssh/prompt.rb +93 -0
- data/lib/net/ssh/proxy/errors.rb +8 -28
- data/lib/net/ssh/proxy/http.rb +75 -107
- data/lib/net/ssh/proxy/socks4.rb +35 -48
- data/lib/net/ssh/proxy/socks5.rb +76 -108
- data/lib/net/ssh/service/forward.rb +267 -0
- data/lib/net/ssh/test.rb +89 -0
- data/lib/net/ssh/test/channel.rb +129 -0
- data/lib/net/ssh/test/extensions.rb +152 -0
- data/lib/net/ssh/test/kex.rb +44 -0
- data/lib/net/ssh/test/local_packet.rb +51 -0
- data/lib/net/ssh/test/packet.rb +81 -0
- data/lib/net/ssh/test/remote_packet.rb +38 -0
- data/lib/net/ssh/test/script.rb +157 -0
- data/lib/net/ssh/test/socket.rb +59 -0
- data/lib/net/ssh/transport/algorithms.rb +384 -0
- data/lib/net/ssh/transport/cipher_factory.rb +72 -0
- data/lib/net/ssh/transport/constants.rb +22 -58
- data/lib/net/ssh/transport/hmac.rb +31 -0
- data/lib/net/ssh/transport/hmac/abstract.rb +48 -0
- data/lib/net/ssh/transport/hmac/md5.rb +12 -0
- data/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
- data/lib/net/ssh/transport/hmac/none.rb +15 -0
- data/lib/net/ssh/transport/hmac/sha1.rb +13 -0
- data/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
- data/lib/net/ssh/transport/identity_cipher.rb +40 -0
- data/lib/net/ssh/transport/kex.rb +13 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
- data/lib/net/ssh/{util → transport}/openssl.rb +22 -40
- data/lib/net/ssh/transport/packet_stream.rb +230 -0
- data/lib/net/ssh/transport/server_version.rb +61 -0
- data/lib/net/ssh/transport/session.rb +225 -303
- data/lib/net/ssh/transport/state.rb +170 -0
- data/lib/net/ssh/verifiers/lenient.rb +30 -0
- data/lib/net/ssh/verifiers/null.rb +12 -0
- data/lib/net/ssh/verifiers/strict.rb +53 -0
- data/lib/net/ssh/version.rb +57 -26
- data/net-ssh.gemspec +54 -0
- data/setup.rb +1585 -0
- data/test/authentication/methods/common.rb +28 -0
- data/test/authentication/methods/test_abstract.rb +51 -0
- data/test/authentication/methods/test_hostbased.rb +108 -0
- data/test/authentication/methods/test_keyboard_interactive.rb +98 -0
- data/test/authentication/methods/test_password.rb +50 -0
- data/test/authentication/methods/test_publickey.rb +123 -0
- data/test/authentication/test_agent.rb +205 -0
- data/test/authentication/test_key_manager.rb +100 -0
- data/test/authentication/test_session.rb +93 -0
- data/test/common.rb +106 -0
- data/test/configs/exact_match +8 -0
- data/test/configs/wild_cards +14 -0
- data/test/connection/test_channel.rb +452 -0
- data/test/connection/test_session.rb +483 -0
- data/test/test_all.rb +6 -0
- data/test/test_buffer.rb +336 -0
- data/test/test_buffered_io.rb +63 -0
- data/test/test_config.rb +78 -0
- data/test/test_key_factory.rb +67 -0
- data/test/transport/hmac/test_md5.rb +34 -0
- data/test/transport/hmac/test_md5_96.rb +25 -0
- data/test/transport/hmac/test_none.rb +34 -0
- data/test/transport/hmac/test_sha1.rb +34 -0
- data/test/transport/hmac/test_sha1_96.rb +25 -0
- data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +146 -0
- data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +92 -0
- data/test/transport/test_algorithms.rb +302 -0
- data/test/transport/test_cipher_factory.rb +163 -0
- data/test/transport/test_hmac.rb +34 -0
- data/test/transport/test_identity_cipher.rb +40 -0
- data/test/transport/test_packet_stream.rb +433 -0
- data/test/transport/test_server_version.rb +55 -0
- data/test/transport/test_session.rb +312 -0
- data/test/transport/test_state.rb +173 -0
- metadata +102 -253
- data/ChangeLog +0 -560
- data/LICENSE +0 -7
- data/NEWS +0 -152
- data/README +0 -14
- data/bin/rb-keygen +0 -210
- data/doc/LICENSE-BSD +0 -27
- data/doc/LICENSE-GPL +0 -280
- data/doc/LICENSE-RUBY +0 -56
- data/doc/manual-html/chapter-1.html +0 -388
- data/doc/manual-html/chapter-2.html +0 -552
- data/doc/manual-html/chapter-3.html +0 -470
- data/doc/manual-html/chapter-4.html +0 -413
- data/doc/manual-html/chapter-5.html +0 -525
- data/doc/manual-html/chapter-6.html +0 -456
- data/doc/manual-html/chapter-7.html +0 -343
- data/doc/manual-html/index.html +0 -235
- data/doc/manual-html/stylesheets/manual.css +0 -270
- data/doc/manual-html/stylesheets/ruby.css +0 -17
- data/doc/manual/chapter.erb +0 -38
- data/doc/manual/example.erb +0 -18
- data/doc/manual/index.erb +0 -29
- data/doc/manual/manual.rb +0 -311
- data/doc/manual/manual.yml +0 -73
- data/doc/manual/page.erb +0 -87
- data/doc/manual/parts/0000.txt +0 -5
- data/doc/manual/parts/0001.txt +0 -3
- data/doc/manual/parts/0002.txt +0 -40
- data/doc/manual/parts/0003.txt +0 -6
- data/doc/manual/parts/0004.txt +0 -7
- data/doc/manual/parts/0005.txt +0 -1
- data/doc/manual/parts/0006.txt +0 -49
- data/doc/manual/parts/0007.txt +0 -67
- data/doc/manual/parts/0008.txt +0 -43
- data/doc/manual/parts/0009.txt +0 -14
- data/doc/manual/parts/0010.txt +0 -7
- data/doc/manual/parts/0011.txt +0 -14
- data/doc/manual/parts/0012.txt +0 -3
- data/doc/manual/parts/0013.txt +0 -20
- data/doc/manual/parts/0014.txt +0 -32
- data/doc/manual/parts/0015.txt +0 -14
- data/doc/manual/parts/0016.txt +0 -28
- data/doc/manual/parts/0017.txt +0 -50
- data/doc/manual/parts/0018.txt +0 -35
- data/doc/manual/parts/0019.txt +0 -7
- data/doc/manual/parts/0020.txt +0 -72
- data/doc/manual/parts/0021.txt +0 -50
- data/doc/manual/parts/0022.txt +0 -42
- data/doc/manual/parts/0023.txt +0 -51
- data/doc/manual/parts/0024.txt +0 -18
- data/doc/manual/parts/0025.txt +0 -18
- data/doc/manual/parts/0026.txt +0 -15
- data/doc/manual/parts/0027.txt +0 -37
- data/doc/manual/parts/0028.txt +0 -16
- data/doc/manual/parts/0029.txt +0 -1
- data/doc/manual/parts/0030.txt +0 -52
- data/doc/manual/parts/0031.txt +0 -25
- data/doc/manual/stylesheets/manual.css +0 -270
- data/doc/manual/stylesheets/ruby.css +0 -17
- data/doc/manual/tutorial.erb +0 -30
- data/examples/auth-forward.rb +0 -41
- data/examples/channel-demo.rb +0 -81
- data/examples/port-forward.rb +0 -51
- data/examples/process-demo.rb +0 -91
- data/examples/remote-net-port-forward.rb +0 -45
- data/examples/remote-port-forward.rb +0 -80
- data/examples/shell-demo.rb +0 -46
- data/examples/ssh-client.rb +0 -67
- data/examples/sync-shell-demo.rb +0 -69
- data/examples/tail-demo.rb +0 -49
- data/lib/net/ssh/connection/driver.rb +0 -446
- data/lib/net/ssh/connection/services.rb +0 -72
- data/lib/net/ssh/host-key-verifier.rb +0 -52
- data/lib/net/ssh/known-hosts.rb +0 -96
- data/lib/net/ssh/lenient-host-key-verifier.rb +0 -25
- data/lib/net/ssh/null-host-key-verifier.rb +0 -14
- data/lib/net/ssh/service/agentforward/driver.rb +0 -78
- data/lib/net/ssh/service/agentforward/services.rb +0 -41
- data/lib/net/ssh/service/forward/driver.rb +0 -319
- data/lib/net/ssh/service/forward/local-network-handler.rb +0 -71
- data/lib/net/ssh/service/forward/remote-network-handler.rb +0 -83
- data/lib/net/ssh/service/forward/services.rb +0 -76
- data/lib/net/ssh/service/process/driver.rb +0 -153
- data/lib/net/ssh/service/process/open.rb +0 -193
- data/lib/net/ssh/service/process/popen3.rb +0 -178
- data/lib/net/ssh/service/process/services.rb +0 -66
- data/lib/net/ssh/service/services.rb +0 -60
- data/lib/net/ssh/service/shell/driver.rb +0 -86
- data/lib/net/ssh/service/shell/services.rb +0 -54
- data/lib/net/ssh/service/shell/shell.rb +0 -222
- data/lib/net/ssh/service/shell/sync.rb +0 -114
- data/lib/net/ssh/session.rb +0 -305
- data/lib/net/ssh/transport/algorithm-negotiator.rb +0 -275
- data/lib/net/ssh/transport/compress/compressor.rb +0 -53
- data/lib/net/ssh/transport/compress/decompressor.rb +0 -53
- data/lib/net/ssh/transport/compress/none-compressor.rb +0 -39
- data/lib/net/ssh/transport/compress/none-decompressor.rb +0 -39
- data/lib/net/ssh/transport/compress/services.rb +0 -68
- data/lib/net/ssh/transport/compress/zlib-compressor.rb +0 -60
- data/lib/net/ssh/transport/compress/zlib-decompressor.rb +0 -52
- data/lib/net/ssh/transport/errors.rb +0 -47
- data/lib/net/ssh/transport/identity-cipher.rb +0 -61
- data/lib/net/ssh/transport/kex/dh-gex.rb +0 -106
- data/lib/net/ssh/transport/kex/dh.rb +0 -249
- data/lib/net/ssh/transport/kex/services.rb +0 -62
- data/lib/net/ssh/transport/ossl/buffer-factory.rb +0 -52
- data/lib/net/ssh/transport/ossl/buffer.rb +0 -87
- data/lib/net/ssh/transport/ossl/cipher-factory.rb +0 -98
- data/lib/net/ssh/transport/ossl/digest-factory.rb +0 -51
- data/lib/net/ssh/transport/ossl/hmac-factory.rb +0 -71
- data/lib/net/ssh/transport/ossl/hmac/hmac.rb +0 -62
- data/lib/net/ssh/transport/ossl/hmac/md5-96.rb +0 -44
- data/lib/net/ssh/transport/ossl/hmac/md5.rb +0 -46
- data/lib/net/ssh/transport/ossl/hmac/none.rb +0 -46
- data/lib/net/ssh/transport/ossl/hmac/services.rb +0 -68
- data/lib/net/ssh/transport/ossl/hmac/sha1-96.rb +0 -44
- data/lib/net/ssh/transport/ossl/hmac/sha1.rb +0 -45
- data/lib/net/ssh/transport/ossl/key-factory.rb +0 -116
- data/lib/net/ssh/transport/ossl/services.rb +0 -149
- data/lib/net/ssh/transport/packet-stream.rb +0 -236
- data/lib/net/ssh/transport/services.rb +0 -146
- data/lib/net/ssh/transport/version-negotiator.rb +0 -73
- data/lib/net/ssh/userauth/agent.rb +0 -222
- data/lib/net/ssh/userauth/constants.rb +0 -35
- data/lib/net/ssh/userauth/driver.rb +0 -183
- data/lib/net/ssh/userauth/methods/hostbased.rb +0 -119
- data/lib/net/ssh/userauth/methods/keyboard-interactive.rb +0 -104
- data/lib/net/ssh/userauth/methods/password.rb +0 -70
- data/lib/net/ssh/userauth/methods/publickey.rb +0 -137
- data/lib/net/ssh/userauth/methods/services.rb +0 -90
- data/lib/net/ssh/userauth/pageant.rb +0 -197
- data/lib/net/ssh/userauth/services.rb +0 -141
- data/lib/net/ssh/userauth/userkeys.rb +0 -258
- data/lib/net/ssh/util/buffer.rb +0 -274
- data/lib/net/ssh/util/prompter.rb +0 -73
- data/test/ALL-TESTS.rb +0 -18
- data/test/connection/tc_channel.rb +0 -136
- data/test/connection/tc_driver.rb +0 -287
- data/test/connection/tc_integration.rb +0 -87
- data/test/proxy/tc_http.rb +0 -209
- data/test/proxy/tc_socks4.rb +0 -148
- data/test/proxy/tc_socks5.rb +0 -214
- data/test/service/agentforward/tc_driver.rb +0 -138
- data/test/service/forward/tc_driver.rb +0 -289
- data/test/service/forward/tc_local_network_handler.rb +0 -123
- data/test/service/forward/tc_remote_network_handler.rb +0 -111
- data/test/service/process/tc_driver.rb +0 -79
- data/test/service/process/tc_integration.rb +0 -119
- data/test/service/process/tc_open.rb +0 -179
- data/test/service/process/tc_popen3.rb +0 -164
- data/test/tc_integration.rb +0 -80
- data/test/transport/compress/tc_none_compress.rb +0 -41
- data/test/transport/compress/tc_none_decompress.rb +0 -45
- data/test/transport/compress/tc_zlib_compress.rb +0 -61
- data/test/transport/compress/tc_zlib_decompress.rb +0 -48
- data/test/transport/kex/tc_dh.rb +0 -312
- data/test/transport/kex/tc_dh_gex.rb +0 -71
- data/test/transport/ossl/fixtures/dsa-encrypted +0 -15
- data/test/transport/ossl/fixtures/dsa-encrypted-bad +0 -15
- data/test/transport/ossl/fixtures/dsa-unencrypted +0 -12
- data/test/transport/ossl/fixtures/dsa-unencrypted-bad +0 -12
- data/test/transport/ossl/fixtures/dsa-unencrypted.pub +0 -1
- data/test/transport/ossl/fixtures/not-a-private-key +0 -4
- data/test/transport/ossl/fixtures/not-supported +0 -2
- data/test/transport/ossl/fixtures/rsa-encrypted +0 -18
- data/test/transport/ossl/fixtures/rsa-encrypted-bad +0 -18
- data/test/transport/ossl/fixtures/rsa-unencrypted +0 -15
- data/test/transport/ossl/fixtures/rsa-unencrypted-bad +0 -15
- data/test/transport/ossl/fixtures/rsa-unencrypted.pub +0 -1
- data/test/transport/ossl/hmac/tc_hmac.rb +0 -58
- data/test/transport/ossl/hmac/tc_md5.rb +0 -50
- data/test/transport/ossl/hmac/tc_md5_96.rb +0 -50
- data/test/transport/ossl/hmac/tc_none.rb +0 -50
- data/test/transport/ossl/hmac/tc_sha1.rb +0 -50
- data/test/transport/ossl/hmac/tc_sha1_96.rb +0 -50
- data/test/transport/ossl/tc_buffer.rb +0 -97
- data/test/transport/ossl/tc_buffer_factory.rb +0 -67
- data/test/transport/ossl/tc_cipher_factory.rb +0 -84
- data/test/transport/ossl/tc_digest_factory.rb +0 -39
- data/test/transport/ossl/tc_hmac_factory.rb +0 -72
- data/test/transport/ossl/tc_key_factory.rb +0 -199
- data/test/transport/tc_algorithm_negotiator.rb +0 -170
- data/test/transport/tc_identity_cipher.rb +0 -52
- data/test/transport/tc_integration.rb +0 -115
- data/test/transport/tc_packet_stream.rb +0 -184
- data/test/transport/tc_session.rb +0 -296
- data/test/transport/tc_version_negotiator.rb +0 -86
- data/test/userauth/methods/tc_hostbased.rb +0 -136
- data/test/userauth/methods/tc_password.rb +0 -89
- data/test/userauth/methods/tc_publickey.rb +0 -167
- data/test/userauth/tc_agent.rb +0 -223
- data/test/userauth/tc_driver.rb +0 -190
- data/test/userauth/tc_integration.rb +0 -97
- data/test/userauth/tc_userkeys.rb +0 -265
- data/test/util/tc_buffer.rb +0 -217
@@ -1,46 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SSH Secure Shell Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-ssh website : http://net-ssh.rubyforge.org
|
13
|
-
# project website: http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
require 'net/ssh/transport/ossl/hmac/hmac'
|
18
|
-
|
19
|
-
module Net
|
20
|
-
module SSH
|
21
|
-
module Transport
|
22
|
-
module OSSL
|
23
|
-
|
24
|
-
module HMAC
|
25
|
-
|
26
|
-
# The "none" algorithm. This has a key and mac length of 0.
|
27
|
-
class None < Abstract
|
28
|
-
|
29
|
-
# Create a new instance of the None HMAC algorithm.
|
30
|
-
def initialize
|
31
|
-
@key_length = @mac_length = 0
|
32
|
-
end
|
33
|
-
|
34
|
-
# Always returns the empty string.
|
35
|
-
def digest( data )
|
36
|
-
""
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SSH Secure Shell Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-ssh website : http://net-ssh.rubyforge.org
|
13
|
-
# project website: http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
module Net
|
18
|
-
module SSH
|
19
|
-
module Transport
|
20
|
-
module OSSL
|
21
|
-
module HMAC
|
22
|
-
|
23
|
-
# Register all services that implement the various support
|
24
|
-
# HMAC algorithms.
|
25
|
-
def register_services( container )
|
26
|
-
container.namespace_define :hmac do |space|
|
27
|
-
|
28
|
-
# Register each supported HMAC algorithm.
|
29
|
-
%w{sha1 sha1-96 md5 md5-96}.each do |name|
|
30
|
-
space.__send__( name.sub(/-/, "_").intern ) do
|
31
|
-
require "net/ssh/transport/ossl/hmac/#{name}"
|
32
|
-
const_get( name.upcase.sub(/-/, "_").intern ).new
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# The :none service is trivial--simply doing as much of nothing
|
37
|
-
# as possible. This is for consistency in how HMAC's are handled,
|
38
|
-
# since it is possible to not have an HMAC for part of the
|
39
|
-
# communication cycle.
|
40
|
-
space.none do
|
41
|
-
require "net/ssh/transport/ossl/hmac/none"
|
42
|
-
None.new
|
43
|
-
end
|
44
|
-
|
45
|
-
# Add the implementations to a hash, naming them according to the
|
46
|
-
# SSH2 specification.
|
47
|
-
space.collection do |c,|
|
48
|
-
Hash[ "hmac-sha1" => c.sha1,
|
49
|
-
"hmac-sha1-96" => c.sha1_96,
|
50
|
-
"hmac-md5" => c.md5,
|
51
|
-
"hmac-md5-96" => c.md5_96,
|
52
|
-
"none" => c.none ]
|
53
|
-
end
|
54
|
-
|
55
|
-
# Add the collection of algorithms to the list of known HMAC
|
56
|
-
# algorithm sources.
|
57
|
-
if space.knows_key?( :hmac_algorithm_sources )
|
58
|
-
space.hmac_algorithm_sources << space.collection
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
module_function :register_services
|
63
|
-
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SSH Secure Shell Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-ssh website : http://net-ssh.rubyforge.org
|
13
|
-
# project website: http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
require 'net/ssh/transport/ossl/hmac/sha1'
|
18
|
-
require 'openssl'
|
19
|
-
|
20
|
-
module Net
|
21
|
-
module SSH
|
22
|
-
module Transport
|
23
|
-
module OSSL
|
24
|
-
|
25
|
-
module HMAC
|
26
|
-
|
27
|
-
# The SHA1-96 HMAC algorithm. This returns only the first 12 bytes of
|
28
|
-
# the digest.
|
29
|
-
class SHA1_96 < SHA1
|
30
|
-
|
31
|
-
# Create a new instance of the SHA1-96 algorithm.
|
32
|
-
def initialize
|
33
|
-
super
|
34
|
-
@mac_length = 12
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SSH Secure Shell Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-ssh website : http://net-ssh.rubyforge.org
|
13
|
-
# project website: http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
require 'net/ssh/transport/ossl/hmac/hmac'
|
18
|
-
require 'openssl'
|
19
|
-
|
20
|
-
module Net
|
21
|
-
module SSH
|
22
|
-
module Transport
|
23
|
-
module OSSL
|
24
|
-
|
25
|
-
module HMAC
|
26
|
-
|
27
|
-
# The SHA1 HMAC algorithm. This has a mac and key length of 20, and
|
28
|
-
# uses the SHA1 digest algorithm.
|
29
|
-
class SHA1 < Abstract
|
30
|
-
|
31
|
-
# Create a new instance of the SHA1 HMAC algorithm.
|
32
|
-
def initialize
|
33
|
-
@mac_length = 20
|
34
|
-
@digest_class = OpenSSL::Digest::SHA1
|
35
|
-
@key_length = 20
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,116 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SSH Secure Shell Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-ssh website : http://net-ssh.rubyforge.org
|
13
|
-
# project website: http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
require 'base64'
|
18
|
-
require 'net/ssh/transport/errors'
|
19
|
-
require 'net/ssh/util/openssl'
|
20
|
-
|
21
|
-
module Net
|
22
|
-
module SSH
|
23
|
-
module Transport
|
24
|
-
|
25
|
-
module OSSL
|
26
|
-
|
27
|
-
# A factory class for returning new Key algorithm factories (actually
|
28
|
-
# classes).
|
29
|
-
class KeyFactory
|
30
|
-
|
31
|
-
# The setter for the buffer factory to use.
|
32
|
-
attr_writer :buffers
|
33
|
-
|
34
|
-
# The setter for describing which prompter service to use when
|
35
|
-
# prompting the user for a key passphrase.
|
36
|
-
attr_writer :prompter
|
37
|
-
|
38
|
-
# Create a new instance of the KeyFactory that uses the given
|
39
|
-
# Hash-like to map SSH2 key algorithm names to names of
|
40
|
-
# factories (classes) that can instantiate those algorithms.
|
41
|
-
def initialize( algorithms )
|
42
|
-
@factories = algorithms
|
43
|
-
end
|
44
|
-
|
45
|
-
# Return a new instance of the key factory for the given name.
|
46
|
-
# If no such algorithm exists, a KeyTypeNotFound error will be raised.
|
47
|
-
def get( name )
|
48
|
-
klass_name = @factories.fetch( name ) do
|
49
|
-
raise KeyTypeNotFound, name
|
50
|
-
end
|
51
|
-
|
52
|
-
return klass_name.new
|
53
|
-
end
|
54
|
-
|
55
|
-
# Loads a private key from a file. It will correctly determine
|
56
|
-
# whether the file describes an RSA or DSA key, and will load it
|
57
|
-
# appropriately. The new key is returned. If the key itself is
|
58
|
-
# encrypted (requiring a passphrase to use), the user will be
|
59
|
-
# prompted to enter their password.
|
60
|
-
def load_private_key( filename )
|
61
|
-
file = File.read( filename )
|
62
|
-
|
63
|
-
if file.match( /-----BEGIN DSA PRIVATE KEY-----/ )
|
64
|
-
key_type = OpenSSL::PKey::DSA
|
65
|
-
elsif file.match( /-----BEGIN RSA PRIVATE KEY-----/ )
|
66
|
-
key_type = OpenSSL::PKey::RSA
|
67
|
-
elsif file.match( /-----BEGIN (.*) PRIVATE KEY-----/ )
|
68
|
-
raise OpenSSL::PKey::PKeyError, "not a supported key type '#{$1}'"
|
69
|
-
else
|
70
|
-
raise OpenSSL::PKey::PKeyError, "not a private key (#{filename})"
|
71
|
-
end
|
72
|
-
|
73
|
-
encrypted_key = file.match( /ENCRYPTED/ )
|
74
|
-
password = encrypted_key ? 'nil' : nil
|
75
|
-
tries = 0
|
76
|
-
|
77
|
-
begin
|
78
|
-
return key_type.new( file, password )
|
79
|
-
rescue OpenSSL::PKey::RSAError, OpenSSL::PKey::DSAError => e
|
80
|
-
if encrypted_key && @prompter
|
81
|
-
tries += 1
|
82
|
-
if tries <= 3
|
83
|
-
password = @prompter.password(
|
84
|
-
"Enter password for #{filename}: " )
|
85
|
-
retry
|
86
|
-
else
|
87
|
-
raise
|
88
|
-
end
|
89
|
-
else
|
90
|
-
raise
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
# Loads a public key from a file. It will correctly determine whether
|
96
|
-
# the file describes an RSA or DSA key, and will load it
|
97
|
-
# appropriately. The new public key is returned.
|
98
|
-
def load_public_key( filename )
|
99
|
-
data = File.open( filename ) { |file| file.read }
|
100
|
-
type, blob = data.split( / / )
|
101
|
-
|
102
|
-
blob = Base64.decode64( blob )
|
103
|
-
reader = @buffers.reader( blob )
|
104
|
-
key = reader.read_key or
|
105
|
-
raise OpenSSL::PKey::PKeyError,
|
106
|
-
"not a public key #{filename.inspect}"
|
107
|
-
return key
|
108
|
-
end
|
109
|
-
|
110
|
-
end
|
111
|
-
|
112
|
-
end
|
113
|
-
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
@@ -1,149 +0,0 @@
|
|
1
|
-
#--
|
2
|
-
# =============================================================================
|
3
|
-
# Copyright (c) 2004,2005 Jamis Buck (jamis@37signals.com)
|
4
|
-
# All rights reserved.
|
5
|
-
#
|
6
|
-
# This source file is distributed as part of the Net::SSH Secure Shell Client
|
7
|
-
# library for Ruby. This file (and the library as a whole) may be used only as
|
8
|
-
# allowed by either the BSD license, or the Ruby license (or, by association
|
9
|
-
# with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SSH
|
10
|
-
# distribution for the texts of these licenses.
|
11
|
-
# -----------------------------------------------------------------------------
|
12
|
-
# net-ssh website : http://net-ssh.rubyforge.org
|
13
|
-
# project website: http://rubyforge.org/projects/net-ssh
|
14
|
-
# =============================================================================
|
15
|
-
#++
|
16
|
-
|
17
|
-
require 'openssl'
|
18
|
-
|
19
|
-
module Net
|
20
|
-
module SSH
|
21
|
-
module Transport
|
22
|
-
module OSSL
|
23
|
-
|
24
|
-
# Register all OpenSSL-related services.
|
25
|
-
def register_services( container )
|
26
|
-
# make sure the user has a valid Ruby and OpenSSL installed.
|
27
|
-
version_check
|
28
|
-
|
29
|
-
# Register all OpenSSL services in the :ossl namespace.
|
30
|
-
container.namespace_define :ossl do |b|
|
31
|
-
|
32
|
-
# The list of known sources of HMAC algorithm implementations.
|
33
|
-
b.hmac_algorithm_sources { Array.new }
|
34
|
-
b.require 'net/ssh/transport/ossl/hmac/services', "#{self}::HMAC"
|
35
|
-
|
36
|
-
# The hash mapping SSH2 cipher names to OpenSSL cipher names.
|
37
|
-
b.cipher_names do
|
38
|
-
Hash[ "3des-cbc" => "des-ede3-cbc",
|
39
|
-
"blowfish-cbc" => "bf-cbc",
|
40
|
-
"aes256-cbc" => "aes-256-cbc",
|
41
|
-
"aes192-cbc" => "aes-192-cbc",
|
42
|
-
"aes128-cbc" => "aes-128-cbc",
|
43
|
-
"idea-cbc" => "idea-cbc",
|
44
|
-
"none" => "none" ]
|
45
|
-
end
|
46
|
-
|
47
|
-
# The hash mapping key names to OpenSSL key implementations.
|
48
|
-
b.key_names do
|
49
|
-
Hash[ "dh" => OpenSSL::PKey::DH,
|
50
|
-
"rsa" => OpenSSL::PKey::RSA,
|
51
|
-
"dsa" => OpenSSL::PKey::DSA ]
|
52
|
-
end
|
53
|
-
|
54
|
-
# The hash mapping digest names to OpenSSL digest implementations.
|
55
|
-
b.digest_names do
|
56
|
-
Hash[ "sha1" => OpenSSL::Digest::SHA1,
|
57
|
-
"md5" => OpenSSL::Digest::MD5 ]
|
58
|
-
end
|
59
|
-
|
60
|
-
# The factory for converting cipher names to cipher implementations.
|
61
|
-
b.cipher_factory( :model => :singleton_deferred ) do |c,p|
|
62
|
-
require 'net/ssh/transport/ossl/cipher-factory'
|
63
|
-
svc = CipherFactory.new( c.cipher_names )
|
64
|
-
svc.identity_cipher = c.identity_cipher
|
65
|
-
svc
|
66
|
-
end
|
67
|
-
|
68
|
-
# The factory for converting HMAC names to HMAC implementations.
|
69
|
-
b.hmac_factory( :model => :singleton_deferred ) do |c,p|
|
70
|
-
require 'net/ssh/transport/ossl/hmac-factory'
|
71
|
-
HMACFactory.new( c.hmac_algorithm_sources )
|
72
|
-
end
|
73
|
-
|
74
|
-
# The factory for obtaining OpenSSL-specific buffer implementations.
|
75
|
-
b.buffer_factory do
|
76
|
-
require 'net/ssh/transport/ossl/buffer-factory'
|
77
|
-
BufferFactory.new
|
78
|
-
end
|
79
|
-
|
80
|
-
# The factory for converting key names to key implementations.
|
81
|
-
b.key_factory( :model => :singleton_deferred ) do |c,p|
|
82
|
-
require 'net/ssh/transport/ossl/key-factory'
|
83
|
-
svc = KeyFactory.new( c.key_names )
|
84
|
-
svc.buffers = c.buffer_factory
|
85
|
-
svc.prompter = c.prompter if c.knows_key?( :prompter )
|
86
|
-
svc
|
87
|
-
end
|
88
|
-
|
89
|
-
# The factory for creating OpenSSL::BN (big number) instances.
|
90
|
-
b.bn_factory { OpenSSL::BN }
|
91
|
-
|
92
|
-
# The factory for converting digest names to digest implementations.
|
93
|
-
b.digest_factory do |c,p|
|
94
|
-
require 'net/ssh/transport/ossl/digest-factory'
|
95
|
-
DigestFactory.new( c.digest_names )
|
96
|
-
end
|
97
|
-
|
98
|
-
end
|
99
|
-
|
100
|
-
# Register each of the factories defined above in the corresponding
|
101
|
-
# factory map, under the :ossl key.
|
102
|
-
container.define do |b|
|
103
|
-
b.cipher_factories[:ossl] = b.ossl.cipher_factory
|
104
|
-
b.hmac_factories[:ossl] = b.ossl.hmac_factory
|
105
|
-
b.key_factories[:ossl] = b.ossl.key_factory
|
106
|
-
b.buffer_factories[:ossl] = b.ossl.buffer_factory
|
107
|
-
b.bn_factories[:ossl] = b.ossl.bn_factory
|
108
|
-
b.digest_factories[:ossl] = b.ossl.digest_factory
|
109
|
-
end
|
110
|
-
end
|
111
|
-
module_function :register_services
|
112
|
-
|
113
|
-
# Tries to make sure that the correct minimum versions of libraries are
|
114
|
-
# installed.
|
115
|
-
def version_check
|
116
|
-
if RUBY_VERSION < "1.8.2"
|
117
|
-
unless OpenSSL::PKey::DH.instance_methods.include? "p"
|
118
|
-
warn "Your OpenSSL module (the Ruby module, not the library)\n" +
|
119
|
-
"is too old. Please go to the Net::SSH downloads page\n" +
|
120
|
-
"and install the most recent snapshot of the OpenSSL\n" +
|
121
|
-
"module.\n\n" +
|
122
|
-
" http://rubyforge.org/projects/net-ssh"
|
123
|
-
abort
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
# make sure that the OpenSSL library itself is at least version 0.9.7
|
128
|
-
match = OpenSSL::OPENSSL_VERSION.match(
|
129
|
-
/OpenSSL (\d+)\.(\d+)\.(\d+)(.*?) / )
|
130
|
-
major = match[1].to_i
|
131
|
-
minor = match[2].to_i
|
132
|
-
tiny = match[3].to_i
|
133
|
-
patch = match[4]
|
134
|
-
|
135
|
-
if major < 1 && ( minor < 9 || minor == 9 && tiny < 7 )
|
136
|
-
ver = "#{major}.#{minor}.#{tiny}#{patch}"
|
137
|
-
warn "Your OpenSSL library (the library itself, not the Ruby\n" +
|
138
|
-
"module) is version #{ver}, too old to use with Net::SSH.\n" +
|
139
|
-
"Please upgrade to at least version 0.9.7 and then rebuild\n" +
|
140
|
-
"your Ruby OpenSSL module."
|
141
|
-
abort
|
142
|
-
end
|
143
|
-
end
|
144
|
-
module_function :version_check
|
145
|
-
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|