net-ssh 1.1.4 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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,37 +0,0 @@
1
- Sometimes it might be nice to programmatically simulate a network connection on a local port and have it forwarded to the remote host. You can do this by means of the @#direct_channel@ method.
2
-
3
- The @#direct_channel@ method looks similar to @#local@: the first three parameters are the local port to simulate the connection from, and the remote host and port that the connection should be forwarded to. The fourth parameter, however, is a _handler_, an object that is used as a callback for a variety of different events.
4
-
5
- The handler for the @#direct_channel@ method may implement any of the following callbacks (all are optional, though you probably want to implement at least one or two of them):
6
-
7
- table(list).
8
- |_. Callback |_. Description |
9
- |=^. @confirm@ | This is invoked when the channel has been opened and the remote host has confirmed it. This accepts four parameters: the channel itself, the local port, remote host, and remote port. (In this way, the same handler may be used for multiple forward requests.)|
10
- |=^. @process@ | After the channel has been confirmed, this is invoked, to process the channel. This callback will be invoked in a new Thread, so that if your handler needs to listen to a socket and then send data received from it over the channel, it can do so without blocking the main loop. The callback accepts a single parameter, the channel handle itself.|
11
- |=^. @on_close@ | This is called when the channel over which this forwarded connection is being processed has been closed. The callback accepts a single parameter, the channel itself.|
12
- |=^. @on_eof@ | When the remote machine indicates it will send no more data, this callback will be invoked. It accepts a single parameter, the channel itself.|
13
- |=^. @on_receive@ | This is invoked when data is received from the remote machine. It accepts two parameters: the channel handle, and the data that was received.|
14
-
15
- For example, the following example pretends to be a client that has connected to the local host on a forwarded port:
16
-
17
- {{{lang=ruby,number=true,caption=Using a handler object to mimic a forwarded port
18
- class Handler
19
- def on_receive( channel, data )
20
- puts "got data: #{data.inspect}"
21
- channel.send_data "subsequent request"
22
- end
23
-
24
- def process( channel )
25
- channel.send_data "initial request"
26
- end
27
- end
28
-
29
- Net::SSH.start( 'host' ) do |session|
30
- session.forward.direct_channel( 1234, 'somewhere.else.net',
31
- 4321, Handler.new )
32
-
33
- session.loop
34
- end
35
- }}}
36
-
37
- The local port number for @#direct_channel@ has no real purpose, other than to report to the SSH server that the "virtual" connection occurred on that port.
@@ -1,16 +0,0 @@
1
- You can use handlers going in the other direction, too. If you want to programmatically process forwarded data from a remote host, you can use the @#remote@ method. This takes two parameters, with an optional third parameter. The two required parameters are the handler to use, and the remote port that should be listened to. The optional parameter is the remote bind address, which defaults to '127.0.0.1'.
2
-
3
- (Incidentally, if the port is 0, a new port will be allocated for you automatically by the server.)
4
-
5
- Whenever connections are received on the remote port, they will be forwarded to the handler, which may implement the following callbacks:
6
-
7
- table(list).
8
- |_. Callback |_. Description |
9
- |=^. @error@ | This is invoked if the forward could not be initiated. It accepts a single parameter, which is the error message. |
10
- |=^. @on_close@ | This is invoked when the channel that was assigned to process this forwarded connection has been closed. The callback takes one parameter: the channel itself. |
11
- |=^. @on_eof@ | This is invoked when the remote end of the connection has promised not to send any more data. The local end of the channel may continue to send data, however. This callback takes on parameter: the channel itself.|
12
- |=^. @on_open@ | This is invoked when a new connection is received over the forwarded channel. It accepts five parameters: the channel object, the connected address, the connected port, the originator address, and the originator port. |
13
- |=^. @on_receive@ | This is invoked when data is received over the channel from the remote connection. It accepts two parameters: the channel object, and the data that was received. |
14
- |=^. @setup@ | This is invoked immediately after the forward request has been acknowledged as successful. It accepts a single parameter, which is the port that was assigned to this forward. If the port parameter to @#remote@ was not 0, then that same value will be passed to the callback. Otherwise, the newly allocated port number will be passed to the callback. |
15
-
16
- Note that the @on_receive@ handler is required--all other callbacks may remain unimplemented by the handler.
@@ -1 +0,0 @@
1
- Many times, you may find yourself behind a firewall, unable to SSH out. In such instances, you can often take advantage of your existing proxies to tunnel an SSH connection through your firewall.
@@ -1,52 +0,0 @@
1
- If you have an HTTP proxy running, you may be able to use it to your advantage. The following snippet demonstrates how to tunnel an SSH connection through an HTTP proxy:
2
-
3
- {{{lang=ruby,number=true,caption=Tunnelling an SSH connection over HTTP
4
- require 'net/ssh'
5
- require 'net/ssh/proxy/http'
6
-
7
- proxy_host = 'my.proxy.com'
8
- proxy_port = 8080
9
- proxy = Net::SSH::Proxy::HTTP.new( proxy_host, proxy_port )
10
-
11
- Net::SSH.start( 'host', :proxy => proxy ) do |session|
12
- ...
13
- end
14
- }}}
15
-
16
- As you can see, you first create an instance of the proxy you want to use. (This flexibility allows for other proxy types to be supported, although at present only HTTP and SOCKS are available.)
17
-
18
- Once you've created your proxy, you just start your SSH session, as usual, except you also pass a @:proxy@ option. The proxy will then be used to obtain a connection to the remote host.
19
-
20
- Note: If your proxy does not allow connects to be made to other hosts on port 22, then you'll have to do some magic to allow SSH connections on your remote host on ports other than 22. Port forwarding on that remote host (from itself, to itself), can help you there.
21
-
22
- For instance, if your proxy disallows connections to any port except (say) 443, you could run the following command on the remote host:
23
-
24
- {{{lang=shell,caption=Forwarding a port using the ssh command
25
- ssh -gL 443:localhost:22 localhost
26
- }}}
27
-
28
- Then, as long as that command is running, port 443 will always be forwarded to port 22. Naturally, this means that you must run this command while you have access to the box; if you can't access that machine in the first place (ie, because you're behind a firewall), then it does you no good.
29
-
30
- h3. Proxy Authentication
31
-
32
- Some proxies require authentication. Net::SSH supports these proxies as well. If you specify the user name either as a @:user@ option to the HTTP proxy constructor, or in the @HTTP_PROXY_USER@ or @CONNECT_USER@ environment variables, that name will be used to authenticate with the proxy. Likewise, the password may be given either via the @:password@ constructor option, or via the @HTTP_PROXY_PASSWORD@ or @CONNECT_PASSWORD@ environment variables.
33
-
34
- {{{lang=ruby,number=true,caption=Using HTTP proxy authentication
35
- require 'net/ssh'
36
- require 'net/ssh/proxy/http'
37
-
38
- proxy_host = 'my.proxy.com'
39
- proxy_port = 8080
40
- proxy_user = 'my-name'
41
- proxy_password = 'my-password'
42
-
43
- proxy = Net::SSH::Proxy::HTTP.new( proxy_host, proxy_port,
44
- :user => proxy_user,
45
- :password => proxy_password )
46
-
47
- Net::SSH.start( 'host', :proxy => proxy ) do |session|
48
- ...
49
- end
50
- }}}
51
-
52
- Note that currently, only basic authentication is supported; in the future, digest authentication may be added for proxies that support it.
@@ -1,25 +0,0 @@
1
- In addition to the HTTP proxy, Net::SSH also supports SOCKS proxies (both versions 4 and 5). Their usage is almost identical to the HTTP version (except SOCKS4 does not use passwords, just user names):
2
-
3
- {{{lang=ruby,number=true,caption=Using SOCKS proxies
4
- require 'net/ssh'
5
- require 'net/ssh/proxy/socks4'
6
- require 'net/ssh/proxy/socks5'
7
-
8
- proxy_host = 'my.proxy.com'
9
- proxy_port = 1080
10
- proxy_user = 'my-name'
11
- proxy_password = 'my-password'
12
-
13
- socks4 = Net::SSH::Proxy::SOCKS4.new( proxy_host, proxy_port,
14
- :user => proxy_user )
15
-
16
- socks5 = Net::SSH::Proxy::SOCKS5.new( proxy_host, proxy_port,
17
- :user => proxy_user,
18
- :password => proxy_password)
19
-
20
- Net::SSH.start( 'host', :proxy => socks4 ) do |session|
21
- ...
22
- end
23
- }}}
24
-
25
-
@@ -1,270 +0,0 @@
1
- body {
2
- background: #FFF;
3
- font-family: sans-serif;
4
- color: #000;
5
- margin: 0px;
6
- }
7
-
8
- a {
9
- color: #00F;
10
- text-decoration: none;
11
- }
12
-
13
- a:hover {
14
- text-decoration: underline;
15
- }
16
-
17
- .product-manual {
18
- text-align: center;
19
- font-size: x-large;
20
- font-variant: small-caps;
21
- font-weight: bold;
22
- color: #005;
23
- }
24
-
25
- .copyright {
26
- text-align: center;
27
- font-size: small;
28
- font-style: italic;
29
- color: #005;
30
- margin-top: 1in;
31
- }
32
-
33
- #banner {
34
- background: #005;
35
- color: #FFF;
36
- border-bottom: 1px solid #000;
37
- padding-top: 0.5em;
38
- padding-bottom: 0.5em;
39
- padding-left: 1em;
40
- margin-bottom: 1em;
41
- }
42
-
43
- #banner .title {
44
- font-size: x-large;
45
- }
46
-
47
- #banner .title:first-letter {
48
- font-size: 250%;
49
- font-weight: normal;
50
- float: left;
51
- margin-top: -7px;
52
- margin-bottom: -7px;
53
- }
54
-
55
- #banner .product {
56
- font-weight: bold;
57
- color: #FF7;
58
- letter-spacing: 0.5em;
59
- }
60
-
61
- #banner .tagline {
62
- font-style: italic;
63
- font-size: large;
64
- letter-spacing: 0.1em;
65
- color: #FFF;
66
- }
67
-
68
- #banner .info {
69
- color: white;
70
- font-size: small;
71
- padding-right: 1em;
72
- }
73
-
74
- #content {
75
- margin-left: 0cm;
76
- margin-right: 1cm;
77
- }
78
-
79
- #navigation {
80
- font-size: x-small;
81
- border-right: 2px groove black;
82
- border-top: 2px groove black;
83
- margin-right: 1em;
84
- width: 200px;
85
- height: 100%;
86
- background: #FFD;
87
- }
88
-
89
- #navigation ul, #navigation ol {
90
- margin-left: 1.2em;
91
- padding-left: 1.2em;
92
- }
93
-
94
- #navigation .license {
95
- font-size: x-small;
96
- text-align: center;
97
- border-top: 1px dashed #005;
98
- margin-top: 2em;
99
- padding: 1em;
100
- }
101
-
102
- .section {
103
- margin-bottom: 1em;
104
- }
105
-
106
- .section p {
107
- text-align: justify;
108
- }
109
-
110
- #content h1 {
111
- background: #005;
112
- color: #FFF;
113
- font-size: x-large;
114
- font-weight: bold;
115
- font-variant: small-caps;
116
- padding: 0.5em;
117
- border: 1px solid #000;
118
- margin-top: 0px;
119
- margin-bottom: 1em;
120
- }
121
-
122
- #content h2 {
123
- background: #005;
124
- color: #FFF;
125
- font-size: large;
126
- font-weight: bold;
127
- font-variant: small-caps;
128
- padding: 0.25em;
129
- padding-left: 0.5em;
130
- border: 1px solid #000;
131
- margin-bottom: 1em;
132
- }
133
-
134
- #content h3 {
135
- background: #FFD;
136
- color: #000;
137
- font-size: normal;
138
- font-weight: bold;
139
- font-variant: small-caps;
140
- padding: 0.25em;
141
- padding-left: 0.5em;
142
- border: 1px dotted #000;
143
- margin-bottom: 1em;
144
- }
145
-
146
- #content h4 {
147
- background: #FFE;
148
- color: #000;
149
- font-size: normal;
150
- font-weight: bold;
151
- font-variant: small-caps;
152
- padding: 0.25em;
153
- padding-left: 0.5em;
154
- border: 1px dotted #777;
155
- margin-bottom: 1em;
156
- }
157
-
158
- #navigation h1 {
159
- margin: 0px;
160
- padding: 1em;
161
- color: #005;
162
- background: transparent;
163
- font-weight: bold;
164
- font-size: 150%;
165
- font-variant: small-caps;
166
- text-align: center;
167
- }
168
-
169
- #navigation h2 {
170
- margin: 0px;
171
- margin-bottom: 1em;
172
- padding: 0.5em;
173
- border-top: 1px dashed #005;
174
- border-bottom: 1px dashed #005;
175
- color: #005;
176
- background: transparent;
177
- font-weight: bold;
178
- font-size: 125%;
179
- font-variant: small-caps;
180
- text-align: center;
181
- }
182
-
183
- table.list {
184
- margin: 2em;
185
- border: 1px solid black;
186
- background: #FFD;
187
- padding: 0px;
188
- border-spacing: 0px;
189
- }
190
-
191
- table.list th {
192
- border-bottom: 1px solid #005;
193
- padding-bottom: 5px;
194
- background: #008;
195
- color: white;
196
- padding: 0.5em;
197
- text-align: left;
198
- }
199
-
200
- table.list td {
201
- padding: 0.2em;
202
- text-align: left;
203
- vertical-align: top;
204
- border-bottom: 1px solid;
205
- }
206
-
207
- .prevnext {
208
- padding: 0.5em 1em 0.5em 1em;
209
- background: #557;
210
- color: #FFF;
211
- font-size: small;
212
- font-weight: bold;
213
- border: 1px solid #000;
214
- }
215
-
216
- .prevnext a {
217
- color: #FF0;
218
- }
219
-
220
- .top .prevnext {
221
- margin: 0 0 1em 0;
222
- text-align: left;
223
- }
224
-
225
- .bottom .prevnext {
226
- margin: 1em 0 0 0;
227
- text-align: right;
228
- }
229
-
230
- .figure {
231
- border: 1px solid black;
232
- line-height: normal;
233
- background: #FFD;
234
- margin: 2em;
235
- }
236
-
237
- .figure .caption {
238
- background: #008;
239
- color: white;
240
- font-weight: bold;
241
- font-size: small;
242
- padding: 4px 24px 4px 8px;
243
- margin-left: -4px;
244
- border: 1px dotted #77F;
245
- }
246
-
247
- .figure table {
248
- padding-top: 0.8em;
249
- padding-bottom: 0.5em;
250
- }
251
-
252
- .figure .body {
253
- padding-left: 1em;
254
- }
255
-
256
- .figure pre {
257
- padding: 0px;
258
- background: transparent;
259
- border: none;
260
- font-size: small;
261
- font-family: monospace;
262
- }
263
-
264
- .figure .lineno {
265
- text-align: right;
266
- color: #B00;
267
- font-family: monospace;
268
- font-size: small;
269
- padding-right: 1em;
270
- }
@@ -1,17 +0,0 @@
1
- .ruby .normal {}
2
- .ruby .comment { color: #005; font-style: italic; }
3
- .ruby .keyword { color: #A00; font-weight: bold; }
4
- .ruby .method { color: #077; }
5
- .ruby .class { color: #074; }
6
- .ruby .module { color: #050; }
7
- .ruby .punct { color: #447; font-weight: bold; }
8
- .ruby .symbol { color: #099; }
9
- .ruby .string { color: #944; }
10
- .ruby .char { color: #F07; }
11
- .ruby .ident { color: #004; }
12
- .ruby .constant { color: #07F; }
13
- .ruby .regex { color: #B66; }
14
- .ruby .number { color: #D55; }
15
- .ruby .attribute { color: #377; }
16
- .ruby .global { color: #3B7; }
17
- .ruby .expr { color: #227; }
@@ -1,30 +0,0 @@
1
- <h1>Tutorial #<%= object.index %>. <%= object.title %></h1>
2
-
3
- <p>The sources for this tutorial may be found in the <tt>tutorial/<%= "%02d" % object.index %></tt>
4
- directory of the Copland distribution.</p>
5
-
6
- <% if object.intro %>
7
-
8
- <h2>Introduction</h2>
9
-
10
- <%= object.intro.to_html %>
11
-
12
- <% end %>
13
-
14
- <h2>Steps</h2>
15
-
16
- <ol>
17
- <% object.steps.each do |step| %>
18
-
19
- <li><%= step.to_html %></li>
20
-
21
- <% end %>
22
- </ol>
23
-
24
- <% if object.summary %>
25
-
26
- <h2>Summary</h2>
27
-
28
- <%= object.summary.to_html %>
29
-
30
- <% end %>