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,41 +0,0 @@
1
- require 'rubygems'
2
-
3
- $:.unshift "../lib"
4
- require 'net/ssh'
5
-
6
-
7
-
8
- Net::SSH.start( 'localhost', { :verbose => :debug, :forward_agent => true } ) do |session|
9
- #Net::SSH.start( 'localhost' ) do |session|
10
-
11
- def exec( command )
12
- lambda do |channel|
13
- channel.exec command
14
- channel.on_data do |ch,data|
15
- ch[:data] ||= ""
16
- ch[:data] << data
17
- end
18
- channel.on_extended_data do |ch,type,data|
19
- ch[:extended_data] ||= []
20
- ch[:extended_data][type] ||= ""
21
- ch[:extended_data][type] << data
22
- end
23
- end
24
- end
25
-
26
- c = session.open_channel( &exec( "ssh -A munkyii.nodnol.org ssh-add -l" ) )
27
-
28
- session.loop
29
-
30
- puts "----------------------------------"
31
- if c.valid?
32
- puts c[:data]
33
- if c[:extended_data] && c[:extended_data][1]
34
- puts "-- stderr: --"
35
- puts c[:extended_data][1]
36
- end
37
- else
38
- puts "channel was not opened: #{c.reason} (#{c.reason_code})"
39
- end
40
-
41
- end
@@ -1,81 +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 "../lib"
18
- require 'net/ssh'
19
-
20
- # This assumes three things:
21
- #
22
- # 1) That you have an SSH server running on your local machine,
23
- # 2) That the USER environment variable is set to your user name, and
24
- # 3) That you have public and private keys conigured so that you can log into
25
- # your machine via SSH without being prompted for a password.
26
- #
27
- # If #2 or #3 are not true, you can add your user-name and password as the
28
- # second and third parameters (respectively) to Net::SSH.start.
29
-
30
- Net::SSH.start( 'localhost' ) do |session|
31
-
32
- # Note: two things here,
33
- #
34
- # 1) open_channel does not immediately invoke the associated block. It only
35
- # calls the block after the server has confirmed that the channel is valid.
36
- # 2) channel.exec does not block--it just sends the request to the server and
37
- # returns.
38
- #
39
- # For these two reasons, you MUST call session.loop, so that packets get
40
- # processed and dispatched to the appropriate channel for handling.
41
-
42
- def exec( command )
43
- lambda do |channel|
44
- channel.exec command
45
- channel.on_data do |ch,data|
46
- ch[:data] ||= ""
47
- ch[:data] << data
48
- end
49
- channel.on_extended_data do |ch,type,data|
50
- ch[:extended_data] ||= []
51
- ch[:extended_data][type] ||= ""
52
- ch[:extended_data][type] << data
53
- end
54
- end
55
- end
56
-
57
- channels = []
58
- channels.push session.open_channel( &exec( "echo $HOME" ) )
59
- channels.push session.open_channel( &exec( "ls -la /" ) )
60
- channels.push session.open_channel( &exec( "bogus-command" ) )
61
-
62
- # Process packets from the server and route them to the appropriate channel
63
- # for handling.
64
-
65
- session.loop
66
-
67
- # Display the results.
68
-
69
- channels.each do |c|
70
- puts "----------------------------------"
71
- if c.valid?
72
- puts c[:data]
73
- if c[:extended_data] && c[:extended_data][1]
74
- puts "-- stderr: --"
75
- puts c[:extended_data][1]
76
- end
77
- else
78
- puts "channel was not opened: #{c.reason} (#{c.reason_code})"
79
- end
80
- end
81
- end
@@ -1,51 +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 "../lib"
18
-
19
- require 'net/ssh'
20
-
21
- # This assumes three things:
22
- #
23
- # 1) That you have an SSH server running on your local machine,
24
- # 2) That the USER environment variable is set to your user name, and
25
- # 3) That you have public and private keys conigured so that you can log into
26
- # your machine via SSH without being prompted for a password.
27
- #
28
- # If #2 or #3 are not true, you can add your user-name and password as the
29
- # second and third parameters (respectively) to Net::SSH.start.
30
-
31
- Net::SSH.start( 'localhost' ) do |session|
32
- session.forward.local( 12345, 'www.yahoo.com', 80 )
33
- session.forward.local( 12346, 'www.google.com', 80 )
34
-
35
- trap("SIGINT") do
36
- puts "direct channels open : #{session.forward.open_direct_channel_count}"
37
- puts "direct channels opened: #{session.forward.direct_channel_count}"
38
- puts "active local forwards : #{session.forward.active_locals.length} " +
39
- "(#{session.forward.active_locals.inspect})"
40
- session.close
41
- end
42
-
43
- begin
44
- puts "forwarding ports..."
45
- session.loop { true }
46
- rescue Exception => e
47
- unless e.message =~ /connection closed by remote host/
48
- raise
49
- end
50
- end
51
- end
@@ -1,91 +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 "../lib"
18
- require 'net/ssh'
19
-
20
- # This assumes three things:
21
- #
22
- # 1) That you have an SSH server running on your local machine,
23
- # 2) That the USER environment variable is set to your user name, and
24
- # 3) That you have public and private keys conigured so that you can log into
25
- # your machine via SSH without being prompted for a password.
26
- #
27
- # If #2 or #3 are not true, you can add your user-name and password as the
28
- # second and third parameters (respectively) to Net::SSH.start.
29
-
30
- Net::SSH.start( 'localhost' ) do |session|
31
-
32
- # ===========================================================================
33
-
34
- session.process.open( "bc" ) do |bc|
35
- dialog = [ "5+5", "7*12", "sqrt(2.000000)" ]
36
-
37
- bc.on_success do |p|
38
- puts "process started successfully. starting interactive session."
39
- puts "requesting result of #{dialog.first}"
40
- p.puts dialog.shift
41
- end
42
-
43
- bc.on_failure do |p, status|
44
- puts "process failed to start (#{status})"
45
- end
46
-
47
- bc.on_stdout do |p,data|
48
- puts "--> #{data}"
49
- unless dialog.empty?
50
- puts "requesting result of #{dialog.first}"
51
- p.puts dialog.shift
52
- else
53
- p.close_input
54
- end
55
- end
56
-
57
- bc.on_stderr do |p,data|
58
- puts "got stuff from stderr: #{data}"
59
- end
60
-
61
- bc.on_exit do |p, status|
62
- puts "process finished with exit status: #{status}"
63
- end
64
- end
65
-
66
- puts "done!"
67
-
68
- # ===========================================================================
69
-
70
- puts "now, trying 'bc' with popen3..."
71
-
72
- input, output, error = session.process.popen3( "bc" )
73
- input.puts "5+5"
74
- puts "5+5=#{output.read}"
75
- input.puts "10*2"
76
- puts "10*2=#{output.read}"
77
- input.puts "quit"
78
-
79
- # ===========================================================================
80
-
81
- puts "trying 'cat' with popen3"
82
- session.process.popen3( "cat" ) do |input,output,error|
83
- input.puts "hello"
84
- puts output.read
85
- input.puts "world"
86
- puts output.read
87
- end
88
-
89
- puts "done!"
90
-
91
- 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 "../lib"
18
-
19
- require 'net/ssh'
20
-
21
- # This assumes four things:
22
- #
23
- # 1) That you have an SSH server running on your local machine,
24
- # 2) That the USER environment variable is set to your user name, and
25
- # 3) That you have public and private keys conigured so that you can log into
26
- # your machine via SSH without being prompted for a password.
27
- # 4) That you have a web server running on your local machine on port 80.
28
- #
29
- # If #2 or #3 are not true, you can add your user-name and password as the
30
- # second and third parameters (respectively) to Net::SSH.start.
31
-
32
- Net::SSH.start( 'localhost' ) do |session|
33
- session.forward.remote_to( 80, "localhost", 12345 )
34
-
35
- trap("SIGINT") { session.close }
36
-
37
- begin
38
- puts "forwarding remote port via localhost..."
39
- session.loop { true }
40
- rescue Exception => e
41
- unless e.message =~ /connection closed by remote host/
42
- raise
43
- end
44
- end
45
- 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 "../lib"
18
-
19
- require 'net/ssh'
20
-
21
- # This assumes three things:
22
- #
23
- # 1) That you have an SSH server running on your local machine,
24
- # 2) That the USER environment variable is set to your user name, and
25
- # 3) That you have public and private keys conigured so that you can log into
26
- # your machine via SSH without being prompted for a password.
27
- #
28
- # If #2 or #3 are not true, you can add your user-name and password as the
29
- # second and third parameters (respectively) to Net::SSH.start.
30
-
31
- class RemoteForwardListener
32
- def error( msg )
33
- raise "[#{self.class}] An error occurred: #{msg}"
34
- end
35
-
36
- def setup( remote_port )
37
- puts "[#{self.class}] forwarding enabled from remote port #{remote_port}"
38
- end
39
-
40
- def on_open( channel, c_addr, c_port, o_addr, o_port )
41
- puts "[#{self.class}] channel opened from remote server:"
42
- puts " - connected address: #{c_addr}:#{c_port}"
43
- puts " - originator address: #{o_addr}:#{o_port}"
44
- end
45
-
46
- def on_receive( channel, data )
47
- puts "data recevied from remote machine: #{data.inspect}"
48
- msg = "It worked! You just connected over a remote forwarded SSH " +
49
- "connection!\n\n" +
50
- "------\n" +
51
- data
52
- channel.send_data "HTTP/1.0 200 OK\r\n" +
53
- "Content-Type: text/plain\r\n" +
54
- "Content-Length: #{msg.length}\r\n" +
55
- "\r\n" +
56
- msg
57
- end
58
-
59
- def on_close( channel )
60
- puts "remote channel closed"
61
- end
62
-
63
- def on_eof( channel )
64
- puts "remote end of channel promised not to send any more data"
65
- end
66
- end
67
-
68
- Net::SSH.start( 'localhost' ) do |session|
69
- session.forward.remote( RemoteForwardListener.new, 12345 )
70
-
71
- trap("SIGINT") { session.close }
72
-
73
- begin
74
- session.loop { true }
75
- rescue Exception => e
76
- unless e.message =~ /connection closed by remote host/
77
- raise
78
- end
79
- end
80
- end
@@ -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
- $:.unshift "../lib"
18
- require 'net/ssh'
19
-
20
- Net::SSH.start( 'localhost' ) do |session|
21
-
22
- shell = session.shell.open
23
-
24
- # script what we want to do
25
- shell.pwd
26
- shell.cd "/"
27
- shell.pwd
28
- shell.test "-e foo"
29
- shell.ls "-laZ"
30
- shell.cd "/really/bogus/directory"
31
- shell.send_data "/sbin/ifconfig\n"
32
- shell.pwd
33
- shell.ruby "-v"
34
- shell.cd "/usr/lib"
35
- shell.pwd
36
- shell.exit
37
-
38
- # give the above commands sufficient time to terminate
39
- sleep 0.5
40
-
41
- # display the output
42
- $stdout.print shell.stdout while shell.stdout?
43
- $stderr.puts "-- stderr: --"
44
- $stderr.print shell.stderr while shell.stderr?
45
-
46
- end
@@ -1,67 +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
- # This is a (very) simple, but capable, SSH terminal client. It DOES NOT send
18
- # the size of the terminal window, or handle resizing of the terminal window.
19
-
20
- $:.unshift "../lib"
21
- require 'net/ssh'
22
-
23
- begin
24
- require 'termios'
25
- rescue LoadError
26
- end
27
-
28
- def stdin_buffer( enable )
29
- return unless defined?( Termios )
30
- attr = Termios::getattr( $stdin )
31
- if enable
32
- attr.c_lflag |= Termios::ICANON | Termios::ECHO
33
- else
34
- attr.c_lflag &= ~(Termios::ICANON|Termios::ECHO)
35
- end
36
- Termios::setattr( $stdin, Termios::TCSANOW, attr )
37
- end
38
-
39
- host = ARGV.shift or abort "You must specify the [user@]host to connect to"
40
- if host =~ /@/
41
- user, host = host.match( /(.*?)@(.*)/ )[1,2]
42
- else
43
- user = ENV['USER'] || ENV['USER_NAME']
44
- end
45
-
46
- Net::SSH.start( host, user ) do |session|
47
-
48
- begin
49
- stdin_buffer false
50
-
51
- shell = session.shell.open( :pty => true )
52
-
53
- loop do
54
- break unless shell.open?
55
- if IO.select([$stdin],nil,nil,0.01)
56
- data = $stdin.sysread(1)
57
- shell.send_data data
58
- end
59
-
60
- $stdout.print shell.stdout while shell.stdout?
61
- $stdout.flush
62
- end
63
- ensure
64
- stdin_buffer true
65
- end
66
-
67
- end