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.
Files changed (297) hide show
  1. data/CHANGELOG.rdoc +37 -0
  2. data/Manifest +101 -0
  3. data/README.rdoc +110 -0
  4. data/Rakefile +26 -0
  5. data/{THANKS → THANKS.rdoc} +2 -5
  6. data/lib/net/ssh.rb +189 -57
  7. data/lib/net/ssh/authentication/agent.rb +175 -0
  8. data/lib/net/ssh/authentication/constants.rb +18 -0
  9. data/lib/net/ssh/authentication/key_manager.rb +166 -0
  10. data/lib/net/ssh/authentication/methods/abstract.rb +60 -0
  11. data/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
  12. data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
  13. data/lib/net/ssh/authentication/methods/password.rb +39 -0
  14. data/lib/net/ssh/authentication/methods/publickey.rb +92 -0
  15. data/lib/net/ssh/authentication/pageant.rb +176 -0
  16. data/lib/net/ssh/authentication/session.rb +116 -0
  17. data/lib/net/ssh/buffer.rb +339 -0
  18. data/lib/net/ssh/buffered_io.rb +149 -0
  19. data/lib/net/ssh/config.rb +173 -0
  20. data/lib/net/ssh/connection/channel.rb +575 -454
  21. data/lib/net/ssh/connection/constants.rb +31 -45
  22. data/lib/net/ssh/connection/session.rb +569 -0
  23. data/lib/net/ssh/connection/term.rb +176 -88
  24. data/lib/net/ssh/errors.rb +83 -61
  25. data/lib/net/ssh/key_factory.rb +85 -0
  26. data/lib/net/ssh/known_hosts.rb +129 -0
  27. data/lib/net/ssh/loggable.rb +61 -0
  28. data/lib/net/ssh/packet.rb +102 -0
  29. data/lib/net/ssh/prompt.rb +93 -0
  30. data/lib/net/ssh/proxy/errors.rb +8 -28
  31. data/lib/net/ssh/proxy/http.rb +75 -107
  32. data/lib/net/ssh/proxy/socks4.rb +35 -48
  33. data/lib/net/ssh/proxy/socks5.rb +76 -108
  34. data/lib/net/ssh/service/forward.rb +267 -0
  35. data/lib/net/ssh/test.rb +89 -0
  36. data/lib/net/ssh/test/channel.rb +129 -0
  37. data/lib/net/ssh/test/extensions.rb +152 -0
  38. data/lib/net/ssh/test/kex.rb +44 -0
  39. data/lib/net/ssh/test/local_packet.rb +51 -0
  40. data/lib/net/ssh/test/packet.rb +81 -0
  41. data/lib/net/ssh/test/remote_packet.rb +38 -0
  42. data/lib/net/ssh/test/script.rb +157 -0
  43. data/lib/net/ssh/test/socket.rb +59 -0
  44. data/lib/net/ssh/transport/algorithms.rb +384 -0
  45. data/lib/net/ssh/transport/cipher_factory.rb +72 -0
  46. data/lib/net/ssh/transport/constants.rb +22 -58
  47. data/lib/net/ssh/transport/hmac.rb +31 -0
  48. data/lib/net/ssh/transport/hmac/abstract.rb +48 -0
  49. data/lib/net/ssh/transport/hmac/md5.rb +12 -0
  50. data/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
  51. data/lib/net/ssh/transport/hmac/none.rb +15 -0
  52. data/lib/net/ssh/transport/hmac/sha1.rb +13 -0
  53. data/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
  54. data/lib/net/ssh/transport/identity_cipher.rb +40 -0
  55. data/lib/net/ssh/transport/kex.rb +13 -0
  56. data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
  57. data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
  58. data/lib/net/ssh/{util → transport}/openssl.rb +22 -40
  59. data/lib/net/ssh/transport/packet_stream.rb +230 -0
  60. data/lib/net/ssh/transport/server_version.rb +61 -0
  61. data/lib/net/ssh/transport/session.rb +225 -303
  62. data/lib/net/ssh/transport/state.rb +170 -0
  63. data/lib/net/ssh/verifiers/lenient.rb +30 -0
  64. data/lib/net/ssh/verifiers/null.rb +12 -0
  65. data/lib/net/ssh/verifiers/strict.rb +53 -0
  66. data/lib/net/ssh/version.rb +57 -26
  67. data/net-ssh.gemspec +54 -0
  68. data/setup.rb +1585 -0
  69. data/test/authentication/methods/common.rb +28 -0
  70. data/test/authentication/methods/test_abstract.rb +51 -0
  71. data/test/authentication/methods/test_hostbased.rb +108 -0
  72. data/test/authentication/methods/test_keyboard_interactive.rb +98 -0
  73. data/test/authentication/methods/test_password.rb +50 -0
  74. data/test/authentication/methods/test_publickey.rb +123 -0
  75. data/test/authentication/test_agent.rb +205 -0
  76. data/test/authentication/test_key_manager.rb +100 -0
  77. data/test/authentication/test_session.rb +93 -0
  78. data/test/common.rb +106 -0
  79. data/test/configs/exact_match +8 -0
  80. data/test/configs/wild_cards +14 -0
  81. data/test/connection/test_channel.rb +452 -0
  82. data/test/connection/test_session.rb +483 -0
  83. data/test/test_all.rb +6 -0
  84. data/test/test_buffer.rb +336 -0
  85. data/test/test_buffered_io.rb +63 -0
  86. data/test/test_config.rb +78 -0
  87. data/test/test_key_factory.rb +67 -0
  88. data/test/transport/hmac/test_md5.rb +34 -0
  89. data/test/transport/hmac/test_md5_96.rb +25 -0
  90. data/test/transport/hmac/test_none.rb +34 -0
  91. data/test/transport/hmac/test_sha1.rb +34 -0
  92. data/test/transport/hmac/test_sha1_96.rb +25 -0
  93. data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +146 -0
  94. data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +92 -0
  95. data/test/transport/test_algorithms.rb +302 -0
  96. data/test/transport/test_cipher_factory.rb +163 -0
  97. data/test/transport/test_hmac.rb +34 -0
  98. data/test/transport/test_identity_cipher.rb +40 -0
  99. data/test/transport/test_packet_stream.rb +433 -0
  100. data/test/transport/test_server_version.rb +55 -0
  101. data/test/transport/test_session.rb +312 -0
  102. data/test/transport/test_state.rb +173 -0
  103. metadata +102 -253
  104. data/ChangeLog +0 -560
  105. data/LICENSE +0 -7
  106. data/NEWS +0 -152
  107. data/README +0 -14
  108. data/bin/rb-keygen +0 -210
  109. data/doc/LICENSE-BSD +0 -27
  110. data/doc/LICENSE-GPL +0 -280
  111. data/doc/LICENSE-RUBY +0 -56
  112. data/doc/manual-html/chapter-1.html +0 -388
  113. data/doc/manual-html/chapter-2.html +0 -552
  114. data/doc/manual-html/chapter-3.html +0 -470
  115. data/doc/manual-html/chapter-4.html +0 -413
  116. data/doc/manual-html/chapter-5.html +0 -525
  117. data/doc/manual-html/chapter-6.html +0 -456
  118. data/doc/manual-html/chapter-7.html +0 -343
  119. data/doc/manual-html/index.html +0 -235
  120. data/doc/manual-html/stylesheets/manual.css +0 -270
  121. data/doc/manual-html/stylesheets/ruby.css +0 -17
  122. data/doc/manual/chapter.erb +0 -38
  123. data/doc/manual/example.erb +0 -18
  124. data/doc/manual/index.erb +0 -29
  125. data/doc/manual/manual.rb +0 -311
  126. data/doc/manual/manual.yml +0 -73
  127. data/doc/manual/page.erb +0 -87
  128. data/doc/manual/parts/0000.txt +0 -5
  129. data/doc/manual/parts/0001.txt +0 -3
  130. data/doc/manual/parts/0002.txt +0 -40
  131. data/doc/manual/parts/0003.txt +0 -6
  132. data/doc/manual/parts/0004.txt +0 -7
  133. data/doc/manual/parts/0005.txt +0 -1
  134. data/doc/manual/parts/0006.txt +0 -49
  135. data/doc/manual/parts/0007.txt +0 -67
  136. data/doc/manual/parts/0008.txt +0 -43
  137. data/doc/manual/parts/0009.txt +0 -14
  138. data/doc/manual/parts/0010.txt +0 -7
  139. data/doc/manual/parts/0011.txt +0 -14
  140. data/doc/manual/parts/0012.txt +0 -3
  141. data/doc/manual/parts/0013.txt +0 -20
  142. data/doc/manual/parts/0014.txt +0 -32
  143. data/doc/manual/parts/0015.txt +0 -14
  144. data/doc/manual/parts/0016.txt +0 -28
  145. data/doc/manual/parts/0017.txt +0 -50
  146. data/doc/manual/parts/0018.txt +0 -35
  147. data/doc/manual/parts/0019.txt +0 -7
  148. data/doc/manual/parts/0020.txt +0 -72
  149. data/doc/manual/parts/0021.txt +0 -50
  150. data/doc/manual/parts/0022.txt +0 -42
  151. data/doc/manual/parts/0023.txt +0 -51
  152. data/doc/manual/parts/0024.txt +0 -18
  153. data/doc/manual/parts/0025.txt +0 -18
  154. data/doc/manual/parts/0026.txt +0 -15
  155. data/doc/manual/parts/0027.txt +0 -37
  156. data/doc/manual/parts/0028.txt +0 -16
  157. data/doc/manual/parts/0029.txt +0 -1
  158. data/doc/manual/parts/0030.txt +0 -52
  159. data/doc/manual/parts/0031.txt +0 -25
  160. data/doc/manual/stylesheets/manual.css +0 -270
  161. data/doc/manual/stylesheets/ruby.css +0 -17
  162. data/doc/manual/tutorial.erb +0 -30
  163. data/examples/auth-forward.rb +0 -41
  164. data/examples/channel-demo.rb +0 -81
  165. data/examples/port-forward.rb +0 -51
  166. data/examples/process-demo.rb +0 -91
  167. data/examples/remote-net-port-forward.rb +0 -45
  168. data/examples/remote-port-forward.rb +0 -80
  169. data/examples/shell-demo.rb +0 -46
  170. data/examples/ssh-client.rb +0 -67
  171. data/examples/sync-shell-demo.rb +0 -69
  172. data/examples/tail-demo.rb +0 -49
  173. data/lib/net/ssh/connection/driver.rb +0 -446
  174. data/lib/net/ssh/connection/services.rb +0 -72
  175. data/lib/net/ssh/host-key-verifier.rb +0 -52
  176. data/lib/net/ssh/known-hosts.rb +0 -96
  177. data/lib/net/ssh/lenient-host-key-verifier.rb +0 -25
  178. data/lib/net/ssh/null-host-key-verifier.rb +0 -14
  179. data/lib/net/ssh/service/agentforward/driver.rb +0 -78
  180. data/lib/net/ssh/service/agentforward/services.rb +0 -41
  181. data/lib/net/ssh/service/forward/driver.rb +0 -319
  182. data/lib/net/ssh/service/forward/local-network-handler.rb +0 -71
  183. data/lib/net/ssh/service/forward/remote-network-handler.rb +0 -83
  184. data/lib/net/ssh/service/forward/services.rb +0 -76
  185. data/lib/net/ssh/service/process/driver.rb +0 -153
  186. data/lib/net/ssh/service/process/open.rb +0 -193
  187. data/lib/net/ssh/service/process/popen3.rb +0 -178
  188. data/lib/net/ssh/service/process/services.rb +0 -66
  189. data/lib/net/ssh/service/services.rb +0 -60
  190. data/lib/net/ssh/service/shell/driver.rb +0 -86
  191. data/lib/net/ssh/service/shell/services.rb +0 -54
  192. data/lib/net/ssh/service/shell/shell.rb +0 -222
  193. data/lib/net/ssh/service/shell/sync.rb +0 -114
  194. data/lib/net/ssh/session.rb +0 -305
  195. data/lib/net/ssh/transport/algorithm-negotiator.rb +0 -275
  196. data/lib/net/ssh/transport/compress/compressor.rb +0 -53
  197. data/lib/net/ssh/transport/compress/decompressor.rb +0 -53
  198. data/lib/net/ssh/transport/compress/none-compressor.rb +0 -39
  199. data/lib/net/ssh/transport/compress/none-decompressor.rb +0 -39
  200. data/lib/net/ssh/transport/compress/services.rb +0 -68
  201. data/lib/net/ssh/transport/compress/zlib-compressor.rb +0 -60
  202. data/lib/net/ssh/transport/compress/zlib-decompressor.rb +0 -52
  203. data/lib/net/ssh/transport/errors.rb +0 -47
  204. data/lib/net/ssh/transport/identity-cipher.rb +0 -61
  205. data/lib/net/ssh/transport/kex/dh-gex.rb +0 -106
  206. data/lib/net/ssh/transport/kex/dh.rb +0 -249
  207. data/lib/net/ssh/transport/kex/services.rb +0 -62
  208. data/lib/net/ssh/transport/ossl/buffer-factory.rb +0 -52
  209. data/lib/net/ssh/transport/ossl/buffer.rb +0 -87
  210. data/lib/net/ssh/transport/ossl/cipher-factory.rb +0 -98
  211. data/lib/net/ssh/transport/ossl/digest-factory.rb +0 -51
  212. data/lib/net/ssh/transport/ossl/hmac-factory.rb +0 -71
  213. data/lib/net/ssh/transport/ossl/hmac/hmac.rb +0 -62
  214. data/lib/net/ssh/transport/ossl/hmac/md5-96.rb +0 -44
  215. data/lib/net/ssh/transport/ossl/hmac/md5.rb +0 -46
  216. data/lib/net/ssh/transport/ossl/hmac/none.rb +0 -46
  217. data/lib/net/ssh/transport/ossl/hmac/services.rb +0 -68
  218. data/lib/net/ssh/transport/ossl/hmac/sha1-96.rb +0 -44
  219. data/lib/net/ssh/transport/ossl/hmac/sha1.rb +0 -45
  220. data/lib/net/ssh/transport/ossl/key-factory.rb +0 -116
  221. data/lib/net/ssh/transport/ossl/services.rb +0 -149
  222. data/lib/net/ssh/transport/packet-stream.rb +0 -236
  223. data/lib/net/ssh/transport/services.rb +0 -146
  224. data/lib/net/ssh/transport/version-negotiator.rb +0 -73
  225. data/lib/net/ssh/userauth/agent.rb +0 -222
  226. data/lib/net/ssh/userauth/constants.rb +0 -35
  227. data/lib/net/ssh/userauth/driver.rb +0 -183
  228. data/lib/net/ssh/userauth/methods/hostbased.rb +0 -119
  229. data/lib/net/ssh/userauth/methods/keyboard-interactive.rb +0 -104
  230. data/lib/net/ssh/userauth/methods/password.rb +0 -70
  231. data/lib/net/ssh/userauth/methods/publickey.rb +0 -137
  232. data/lib/net/ssh/userauth/methods/services.rb +0 -90
  233. data/lib/net/ssh/userauth/pageant.rb +0 -197
  234. data/lib/net/ssh/userauth/services.rb +0 -141
  235. data/lib/net/ssh/userauth/userkeys.rb +0 -258
  236. data/lib/net/ssh/util/buffer.rb +0 -274
  237. data/lib/net/ssh/util/prompter.rb +0 -73
  238. data/test/ALL-TESTS.rb +0 -18
  239. data/test/connection/tc_channel.rb +0 -136
  240. data/test/connection/tc_driver.rb +0 -287
  241. data/test/connection/tc_integration.rb +0 -87
  242. data/test/proxy/tc_http.rb +0 -209
  243. data/test/proxy/tc_socks4.rb +0 -148
  244. data/test/proxy/tc_socks5.rb +0 -214
  245. data/test/service/agentforward/tc_driver.rb +0 -138
  246. data/test/service/forward/tc_driver.rb +0 -289
  247. data/test/service/forward/tc_local_network_handler.rb +0 -123
  248. data/test/service/forward/tc_remote_network_handler.rb +0 -111
  249. data/test/service/process/tc_driver.rb +0 -79
  250. data/test/service/process/tc_integration.rb +0 -119
  251. data/test/service/process/tc_open.rb +0 -179
  252. data/test/service/process/tc_popen3.rb +0 -164
  253. data/test/tc_integration.rb +0 -80
  254. data/test/transport/compress/tc_none_compress.rb +0 -41
  255. data/test/transport/compress/tc_none_decompress.rb +0 -45
  256. data/test/transport/compress/tc_zlib_compress.rb +0 -61
  257. data/test/transport/compress/tc_zlib_decompress.rb +0 -48
  258. data/test/transport/kex/tc_dh.rb +0 -312
  259. data/test/transport/kex/tc_dh_gex.rb +0 -71
  260. data/test/transport/ossl/fixtures/dsa-encrypted +0 -15
  261. data/test/transport/ossl/fixtures/dsa-encrypted-bad +0 -15
  262. data/test/transport/ossl/fixtures/dsa-unencrypted +0 -12
  263. data/test/transport/ossl/fixtures/dsa-unencrypted-bad +0 -12
  264. data/test/transport/ossl/fixtures/dsa-unencrypted.pub +0 -1
  265. data/test/transport/ossl/fixtures/not-a-private-key +0 -4
  266. data/test/transport/ossl/fixtures/not-supported +0 -2
  267. data/test/transport/ossl/fixtures/rsa-encrypted +0 -18
  268. data/test/transport/ossl/fixtures/rsa-encrypted-bad +0 -18
  269. data/test/transport/ossl/fixtures/rsa-unencrypted +0 -15
  270. data/test/transport/ossl/fixtures/rsa-unencrypted-bad +0 -15
  271. data/test/transport/ossl/fixtures/rsa-unencrypted.pub +0 -1
  272. data/test/transport/ossl/hmac/tc_hmac.rb +0 -58
  273. data/test/transport/ossl/hmac/tc_md5.rb +0 -50
  274. data/test/transport/ossl/hmac/tc_md5_96.rb +0 -50
  275. data/test/transport/ossl/hmac/tc_none.rb +0 -50
  276. data/test/transport/ossl/hmac/tc_sha1.rb +0 -50
  277. data/test/transport/ossl/hmac/tc_sha1_96.rb +0 -50
  278. data/test/transport/ossl/tc_buffer.rb +0 -97
  279. data/test/transport/ossl/tc_buffer_factory.rb +0 -67
  280. data/test/transport/ossl/tc_cipher_factory.rb +0 -84
  281. data/test/transport/ossl/tc_digest_factory.rb +0 -39
  282. data/test/transport/ossl/tc_hmac_factory.rb +0 -72
  283. data/test/transport/ossl/tc_key_factory.rb +0 -199
  284. data/test/transport/tc_algorithm_negotiator.rb +0 -170
  285. data/test/transport/tc_identity_cipher.rb +0 -52
  286. data/test/transport/tc_integration.rb +0 -115
  287. data/test/transport/tc_packet_stream.rb +0 -184
  288. data/test/transport/tc_session.rb +0 -296
  289. data/test/transport/tc_version_negotiator.rb +0 -86
  290. data/test/userauth/methods/tc_hostbased.rb +0 -136
  291. data/test/userauth/methods/tc_password.rb +0 -89
  292. data/test/userauth/methods/tc_publickey.rb +0 -167
  293. data/test/userauth/tc_agent.rb +0 -223
  294. data/test/userauth/tc_driver.rb +0 -190
  295. data/test/userauth/tc_integration.rb +0 -97
  296. data/test/userauth/tc_userkeys.rb +0 -265
  297. data/test/util/tc_buffer.rb +0 -217
@@ -1,164 +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
- $:.unshift "#{File.dirname(__FILE__)}/../../../lib"
18
-
19
- require 'test/unit'
20
- require 'net/ssh/service/process/popen3'
21
-
22
- class TC_Process_POpen3 < Test::Unit::TestCase
23
-
24
- class MockObject
25
- attr_reader :events
26
-
27
- def initialize
28
- @events = []
29
- end
30
-
31
- def method_missing( sym, *args, &block )
32
- token = [ sym, *args ]
33
- token << :with_block if block
34
- @events << token
35
- end
36
-
37
- undef_method :loop
38
- end
39
-
40
- class Channel < MockObject
41
- attr_reader :connection
42
-
43
- def connection
44
- @connection ||= MockObject.new
45
- end
46
- end
47
-
48
- class TC_SSHStdinPipe < Test::Unit::TestCase
49
- def setup
50
- @channel = Channel.new
51
- @pipe = Net::SSH::Service::Process::POpen3Manager::SSHStdinPipe.new(
52
- @channel )
53
- end
54
-
55
- def test_write
56
- @pipe.write "foo"
57
- assert_equal [ [ :send_data, "foo" ] ], @channel.events
58
- end
59
-
60
- def test_puts_nonl
61
- @pipe.puts "foo"
62
- assert_equal [ [ :send_data, "foo\n" ] ], @channel.events
63
- end
64
-
65
- def test_puts_nl
66
- @pipe.puts "foo\n"
67
- assert_equal [ [ :send_data, "foo\n" ] ], @channel.events
68
- end
69
- end
70
-
71
- class TC_SSHStdoutPipe < Test::Unit::TestCase
72
- def setup
73
- @channel = Channel.new
74
- @pipe = Net::SSH::Service::Process::POpen3Manager::SSHStdoutPipe.new(
75
- @channel )
76
- end
77
-
78
- def test_read_empty
79
- klass = class << @channel.connection; self; end
80
- pipe = @pipe
81
- klass.send(:define_method,:process) { pipe.instance_variable_set( :@data, "foo" ) }
82
- s = @pipe.read
83
- assert_equal "foo", s
84
- end
85
-
86
- def test_read_full
87
- @pipe.do_data @channel, "foo"
88
- s = @pipe.read
89
- assert_equal "foo", s
90
- assert_equal [], @channel.connection.events
91
- end
92
- end
93
-
94
- class TC_SSHStderrPipe < Test::Unit::TestCase
95
- def setup
96
- @channel = Channel.new
97
- @pipe = Net::SSH::Service::Process::POpen3Manager::SSHStderrPipe.new(
98
- @channel )
99
- end
100
-
101
- def test_read_empty
102
- klass = class << @channel.connection; self; end
103
- pipe = @pipe
104
- klass.send(:define_method,:process) do
105
- data = pipe.instance_variable_get( :@data )
106
- pipe.instance_variable_set( :@data, (data||"") + "foo" )
107
- end
108
- s = @pipe.read
109
- assert_equal "foo", s
110
- end
111
-
112
- def test_read_stderr
113
- @pipe.do_data @channel, 1, "foo"
114
- s = @pipe.read
115
- assert_equal "foo", s
116
- assert_equal [], @channel.connection.events
117
- end
118
- end
119
-
120
- class Connection < MockObject
121
- class Channel < MockObject
122
- attr_reader :success
123
- attr_reader :failure
124
-
125
- def on_success( &block )
126
- super
127
- @success = block
128
- end
129
-
130
- def on_failure( &block )
131
- super
132
- @failure = block
133
- end
134
- end
135
-
136
- attr_reader :channel
137
- def open_channel( type )
138
- super
139
- yield @channel = Channel.new
140
- end
141
- end
142
-
143
- def test_popen3
144
- conn = Connection.new
145
- mgr = Net::SSH::Service::Process::POpen3Manager.new( conn, nil )
146
- mgr.popen3( "foo" ) do |a,b,c|
147
- assert_instance_of(
148
- Net::SSH::Service::Process::POpen3Manager::SSHStdinPipe, a )
149
- assert_instance_of(
150
- Net::SSH::Service::Process::POpen3Manager::SSHStdoutPipe, b )
151
- assert_instance_of(
152
- Net::SSH::Service::Process::POpen3Manager::SSHStderrPipe, c )
153
- end
154
-
155
- assert_equal [ [ :open_channel, "session", :with_block ],
156
- [ :loop ] ], conn.events
157
- chan = conn.channel
158
- assert_equal [ [ :on_success, :with_block ],
159
- [ :on_failure, :with_block ], [ :exec, "foo", true ] ], chan.events
160
-
161
- chan.success.call( chan )
162
- end
163
-
164
- end
@@ -1,80 +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
- $:.unshift "#{File.dirname(__FILE__)}/../lib"
18
-
19
- if $run_integration_tests || __FILE__ == $0
20
-
21
- require 'net/ssh/session'
22
- require 'test/unit'
23
-
24
- class TC_Integration < Test::Unit::TestCase
25
-
26
- HOST = "test.host"
27
- USER = "test"
28
- PASSWORD = "test/unit"
29
- SESS_OPTS = {
30
- :registry_options => {
31
- :logs => {
32
- :device => STDOUT,
33
- :default_level => :warn
34
- }
35
- },
36
- :paranoid => false
37
- }
38
-
39
- def setup
40
- @session = Net::SSH::Session.new( HOST, USER, PASSWORD, SESS_OPTS )
41
- end
42
-
43
- def teardown
44
- @session.close
45
- end
46
-
47
- def test_no_auth
48
- assert_raise( Net::SSH::AuthenticationFailed ) do
49
- Net::SSH::Session.new( HOST, USER, PASSWORD+"K", SESS_OPTS )
50
- end
51
- end
52
-
53
- def test_exec
54
- exec_data = ""
55
- @session.open_channel do |chan|
56
- chan.on_data { |ch,data| exec_data << data }
57
- chan.exec "echo hello"
58
- end
59
- @session.loop
60
- assert_equal "hello\n", exec_data
61
- end
62
-
63
- def test_dialog
64
- dialog = [ "2+2", "5*10+1", "quit" ]
65
- results = []
66
- @session.open_channel "session" do |chan|
67
- chan.on_data do |ch,data|
68
- results << data
69
- chan.send_data dialog.shift + "\n"
70
- end
71
- chan.exec "bc"
72
- chan.send_data dialog.shift + "\n"
73
- end
74
- @session.loop
75
- assert_equal [ "4\n", "51\n" ], results
76
- end
77
-
78
- end
79
-
80
- end
@@ -1,41 +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
- $:.unshift "#{File.dirname(__FILE__)}/../../../lib"
18
-
19
- require 'net/ssh/transport/compress/none-compressor'
20
- require 'test/unit'
21
-
22
- class TC_NoneCompressor < Test::Unit::TestCase
23
-
24
- def setup
25
- @compressor = Net::SSH::Transport::Compress::NoneCompressor.new
26
- end
27
-
28
- def test_new
29
- assert_instance_of Net::SSH::Transport::Compress::NoneCompressor,
30
- @compressor.new
31
- end
32
-
33
- def test_compress
34
- expect = "To be, or not to be, that is the question"
35
- assert_equal expect, @compressor.compress( "To be, or not to be, that is the question" )
36
-
37
- expect = "But soft! What light through yonder window breaks?"
38
- assert_equal expect, @compressor.compress( "But soft! What light through yonder window breaks?" )
39
- end
40
-
41
- 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
- $:.unshift "#{File.dirname(__FILE__)}/../../../lib"
18
-
19
- require 'net/ssh/transport/compress/none-decompressor'
20
- require 'test/unit'
21
-
22
- class TC_NoneDecompressor < Test::Unit::TestCase
23
-
24
- def setup
25
- @decompressor = Net::SSH::Transport::Compress::NoneDecompressor.new
26
- end
27
-
28
- def test_new
29
- assert_instance_of Net::SSH::Transport::Compress::NoneDecompressor,
30
- @decompressor.new
31
- end
32
-
33
- def test_decompress
34
- expect = "To be, or not to be, that is the question"
35
-
36
- assert_equal expect, @decompressor.decompress(
37
- "To be, or not to be, that is the question" )
38
-
39
- expect = "But soft! What light through yonder window breaks?"
40
-
41
- assert_equal expect, @decompressor.decompress(
42
- "But soft! What light through yonder window breaks?" )
43
- end
44
-
45
- end
@@ -1,61 +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
- $:.unshift "#{File.dirname(__FILE__)}/../../../lib"
18
-
19
- require 'net/ssh/transport/compress/zlib-compressor'
20
- require 'test/unit'
21
-
22
- class TC_ZLibCompressor < Test::Unit::TestCase
23
-
24
- def setup
25
- @compressor = Net::SSH::Transport::Compress::ZLibCompressor.new
26
- end
27
-
28
- def test_new
29
- assert_instance_of Net::SSH::Transport::Compress::ZLibCompressor,
30
- @compressor.new
31
- end
32
-
33
- def test_compress
34
- expect = "x\234\n\311WHJ\325Q\310/R\310\313/Q(\201\360J2\022K" +
35
- "\0242\213\201t\252BaijqIf~\036\000\000\000\377\377"
36
-
37
- assert_equal expect, @compressor.compress( "To be, or not to be, that is the question" )
38
-
39
- expect = "r*-Q(\316O+QT\010\a\311\346d\246g\000\325g\024\345\227\246g(T" +
40
- "\346\347\245\244\026)\224g\346\245\344\227+$\025\245&f\027\333" +
41
- "\003\000\000\000\377\377"
42
-
43
- assert_equal expect, @compressor.compress( "But soft! What light through yonder window breaks?" )
44
- end
45
-
46
- def test_compress_options
47
- @compressor.configure :level => 1
48
-
49
- expect = "x\001\n\311WHJ\325Q\310/R\310\313/Q(\201\360J2\022K\0242\213" +
50
- "\025J2R\025\nKS\213K2\363\363\000\000\000\000\377\377"
51
-
52
- assert_equal expect, @compressor.compress( "To be, or not to be, that is the question" )
53
-
54
- expect = "r*-Q(\316O+QT\010\a\311\346d\246g\000\325g\024\345\227\246g(T" +
55
- "\346\347\245\244\026)\224g\346\245\344\227+$\025\245&f\027\333" +
56
- "\003\000\000\000\377\377"
57
-
58
- assert_equal expect, @compressor.compress( "But soft! What light through yonder window breaks?" )
59
- end
60
-
61
- end
@@ -1,48 +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
- $:.unshift "#{File.dirname(__FILE__)}/../../../lib"
18
-
19
- require 'net/ssh/transport/compress/zlib-decompressor'
20
- require 'test/unit'
21
-
22
- class TC_ZLibDecompressor < Test::Unit::TestCase
23
-
24
- def setup
25
- @decompressor = Net::SSH::Transport::Compress::ZLibDecompressor.new
26
- end
27
-
28
- def test_new
29
- assert_instance_of Net::SSH::Transport::Compress::ZLibDecompressor,
30
- @decompressor.new
31
- end
32
-
33
- def test_decompress
34
- expect = "To be, or not to be, that is the question"
35
-
36
- assert_equal expect, @decompressor.decompress(
37
- "x\234\n\311WHJ\325Q\310/R\310\313/Q(\201\360J2\022K" +
38
- "\0242\213\201t\252BaijqIf~\036\000\000\000\377\377" )
39
-
40
- expect = "But soft! What light through yonder window breaks?"
41
-
42
- assert_equal expect, @decompressor.decompress(
43
- "r*-Q(\316O+QT\010\a\311\346d\246g\000\325g\024\345\227\246g(T" +
44
- "\346\347\245\244\026)\224g\346\245\344\227+$\025\245&f\027\333" +
45
- "\003\000\000\000\377\377" )
46
- end
47
-
48
- end
@@ -1,312 +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
- $:.unshift "#{File.dirname(__FILE__)}/../../../lib"
18
-
19
- require 'net/ssh/errors'
20
- require 'net/ssh/null-host-key-verifier'
21
- require 'net/ssh/transport/kex/dh'
22
- require 'net/ssh/util/buffer'
23
- require 'test/unit'
24
- require 'ostruct'
25
-
26
- class TC_KEX_DH < Test::Unit::TestCase
27
-
28
- class MockDH < Struct.new( :valid, :p, :g, :priv_key, :pub_key )
29
- def valid?
30
- valid
31
- end
32
-
33
- def compute_key( num )
34
- num
35
- end
36
-
37
- def generate_key!
38
- self.pub_key = MockBN.new( priv_key )
39
- end
40
- end
41
-
42
- class MockServerKey
43
- attr_reader :result
44
-
45
- def initialize( result )
46
- @result = result
47
- end
48
-
49
- def ssh_do_verify( sig, hash )
50
- @result
51
- end
52
-
53
- def ssh_type
54
- "ssh-test"
55
- end
56
- end
57
-
58
- class MockKeys
59
- def get( type )
60
- raise "not DH" unless type == "dh"
61
- return MockDH.new( true )
62
- end
63
- end
64
-
65
- class MockBN
66
- attr_reader :value
67
-
68
- def initialize( value )
69
- @value = value
70
- end
71
-
72
- def to_i( *args )
73
- @value.to_i( *args )
74
- end
75
-
76
- def to_ssh
77
- "[#{@value}]"
78
- end
79
- end
80
-
81
- class MockBNs
82
- def new( value, base )
83
- return value if value.is_a?( Numeric )
84
- MockBN.new( value.to_i( base ) )
85
- end
86
-
87
- def rand( bits )
88
- bits
89
- end
90
- end
91
-
92
- class MockDigest
93
- def self.digest( text )
94
- text
95
- end
96
- end
97
-
98
- class MockReaderBuffer < Net::SSH::Util::ReaderBuffer
99
- def read_key
100
- MockServerKey.new( read )
101
- end
102
-
103
- def read_bignum
104
- MockBN.new( read_string )
105
- end
106
- end
107
-
108
- class MockBuffers
109
- def writer( text="" ); Net::SSH::Util::WriterBuffer.new( text ); end
110
- def reader( text ); MockReaderBuffer.new( text ); end
111
- end
112
-
113
- class MockDigests
114
- def get( type )
115
- raise "not SHA1" unless type == "sha1"
116
- return MockDigest
117
- end
118
- end
119
-
120
- class MockSession
121
- attr_reader :sent_buffer
122
-
123
- def initialize( *script )
124
- @script = script
125
- end
126
-
127
- def send_message( buffer )
128
- @sent_buffer = buffer
129
- end
130
-
131
- def wait_for_message
132
- [ @script.shift, @script.shift ]
133
- end
134
-
135
- def peer
136
- {}
137
- end
138
-
139
- def algorithms
140
- OpenStruct.new( :host_key => "ssh-test" )
141
- end
142
- end
143
-
144
- def setup
145
- @kex = Net::SSH::Transport::Kex::DiffieHellmanGroup1SHA1.new(
146
- MockBNs.new, MockDigests.new )
147
- @kex.keys = MockKeys.new
148
- @kex.buffers = MockBuffers.new
149
- @kex.host_key_verifier = Net::SSH::NullHostKeyVerifier.new
150
-
151
- @init = Net::SSH::Transport::Kex::DiffieHellmanGroup1SHA1::KEXDH_INIT
152
- @reply = Net::SSH::Transport::Kex::DiffieHellmanGroup1SHA1::KEXDH_REPLY
153
- @session_id = "\0\0\0\1A\0\0\0\1B\0\0\0\1C\0\0\0\1D\0\0\0\1E[10][20][30]"
154
-
155
- @exchange_keys_script = [
156
- 31,
157
- MockReaderBuffer.new( "\0\0\0\10key blob\0\0\0\0041001\0\0\0\27\0\0\0\10ssh-test\0\0\0\11signature" ),
158
- 21,
159
- nil
160
- ]
161
-
162
- @exchange_keys_session_id = "\0\0\0\1A\0\0\0\1B\0\0\0\1C\0\0\0\1D\0\0\0\10key blob[80][1001][9]"
163
- end
164
-
165
- def test_generate_key
166
- dh = nil
167
- assert_nothing_raised do
168
- dh = @kex.generate_key( nil, { :need_bytes=>10 } )
169
- end
170
-
171
- expected_p =
172
- 0xFFFFFFFF_FFFFFFFF_C90FDAA2_2168C234_C4C6628B_80DC1CD1_29024E08_8A67CC74_020BBEA6_3B139B22_514A0879_8E3404DD_EF9519B3_CD3A431B_302B0A6D_F25F1437_4FE1356D_6D51C245_E485B576_625E7EC6_F44C42E9_A637ED6B_0BFF5CB6_F406B7ED_EE386BFB_5A899FA5_AE9F2411_7C4B1FE6_49286651_ECE65381_FFFFFFFF_FFFFFFFF
173
-
174
- assert_equal expected_p, dh.p.to_i
175
- assert_equal 2, dh.g
176
- assert_equal 80, dh.priv_key
177
- end
178
-
179
- def test_verify_server_key
180
- key = OpenStruct.new( :ssh_type => "test" )
181
- session = OpenStruct.new( :algorithms => OpenStruct.new( :host_key => "test" ) )
182
- assert_nothing_raised { @kex.verify_server_key( key, session ) }
183
-
184
- session = OpenStruct.new( :algorithms => OpenStruct.new( :host_key => "bogus" ) )
185
- assert_raise( Net::SSH::Exception ) {
186
- @kex.verify_server_key( key, session ) }
187
- end
188
-
189
- def test_send_kexinit
190
- dh = MockDH.new
191
- dh.pub_key = MockBN.new( 80 )
192
- session = MockSession.new( @reply, :worked )
193
-
194
- result = nil
195
- assert_nothing_raised do
196
- result = @kex.send_kexinit( dh, session )
197
- end
198
-
199
- assert_equal :worked, result
200
- assert_equal "#{@init.chr}[80]", session.sent_buffer.to_s
201
-
202
- session = MockSession.new( @reply+1, :worked )
203
-
204
- assert_raise( Net::SSH::Exception ) do
205
- @kex.send_kexinit( dh, session )
206
- end
207
- end
208
-
209
- def test_parse_kex_reply
210
- dh = MockDH.new
211
-
212
- buffer = Net::SSH::Util::WriterBuffer.new
213
- buffer.write_string "key blob"
214
- buffer.write_string "1001"
215
-
216
- sigbuf = Net::SSH::Util::WriterBuffer.new
217
- sigbuf.write_string "ssh-test"
218
- sigbuf.write_string "signature"
219
- buffer.write_string sigbuf
220
-
221
- buffer = MockReaderBuffer.new( buffer.content )
222
-
223
- result = nil
224
- assert_nothing_raised do
225
- result = @kex.parse_kex_reply( dh, buffer, MockSession.new )
226
- end
227
-
228
- assert_equal "key blob", result[:key_blob]
229
- assert_equal "key blob", result[:server_key].result
230
- assert_equal "1001", result[:server_dh_pubkey].value
231
- assert_equal 9, result[:shared_secret].to_i
232
- assert_equal "signature", result[:server_sig]
233
-
234
- buffer = Net::SSH::Util::WriterBuffer.new
235
- buffer.write_string "key blob"
236
- buffer.write_string "1001"
237
-
238
- sigbuf = Net::SSH::Util::WriterBuffer.new
239
- sigbuf.write_string "ssh-bogus"
240
- sigbuf.write_string "signature"
241
- buffer.write_string sigbuf
242
-
243
- buffer = MockReaderBuffer.new( buffer.content )
244
- assert_raise( Net::SSH::Exception ) do
245
- @kex.parse_kex_reply( dh, buffer, MockSession.new )
246
- end
247
- end
248
-
249
- def test_verify_signature
250
- dh = MockDH.new
251
- dh.p = MockBN.new( 2 )
252
- dh.g = MockBN.new( 6 )
253
- dh.pub_key = MockBN.new( 10 )
254
-
255
- data = { :client_version_string => "A",
256
- :server_version_string => "B",
257
- :client_algorithm_packet => "C",
258
- :need_bits => 0,
259
- :server_algorithm_packet => "D" }
260
- result = { :key_blob => "E",
261
- :server_dh_pubkey => MockBN.new( 20 ),
262
- :shared_secret => MockBN.new( 30 ),
263
- :server_key => MockServerKey.new( true ) }
264
-
265
- session_id = nil
266
- assert_nothing_raised do
267
- session_id = @kex.verify_signature( dh, data, result )
268
- end
269
-
270
- assert_equal @session_id, session_id
271
-
272
- result[:server_key] = MockServerKey.new( false )
273
- assert_raise( Net::SSH::Exception ) do
274
- @kex.verify_signature( dh, data, result )
275
- end
276
- end
277
-
278
- def test_confirm_newkeys
279
- session = MockSession.new( 21, :worked )
280
-
281
- assert_nothing_raised do
282
- @kex.confirm_newkeys( session )
283
- end
284
-
285
- assert_equal 21.chr, session.sent_buffer.to_s
286
-
287
- session = MockSession.new( 22, :worked )
288
- assert_raise( Net::SSH::Exception ) do
289
- @kex.confirm_newkeys( session )
290
- end
291
- end
292
-
293
- def test_exchange_keys
294
- session = MockSession.new( *@exchange_keys_script )
295
- data = { :need_bytes => 10,
296
- :client_version_string => "A",
297
- :server_version_string => "B",
298
- :client_algorithm_packet => "C",
299
- :server_algorithm_packet => "D" }
300
-
301
- result = nil
302
- assert_nothing_raised do
303
- result = @kex.exchange_keys( session, data )
304
- end
305
-
306
- assert_equal MockDigest, result.hashing_algorithm
307
- assert_equal @exchange_keys_session_id, result.session_id
308
- assert_equal "key blob", result.server_key.result
309
- assert_equal 9, result.shared_secret.to_i
310
- end
311
-
312
- end