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.
- data/CHANGELOG.rdoc +37 -0
- data/Manifest +101 -0
- data/README.rdoc +110 -0
- data/Rakefile +26 -0
- data/{THANKS → THANKS.rdoc} +2 -5
- data/lib/net/ssh.rb +189 -57
- data/lib/net/ssh/authentication/agent.rb +175 -0
- data/lib/net/ssh/authentication/constants.rb +18 -0
- data/lib/net/ssh/authentication/key_manager.rb +166 -0
- data/lib/net/ssh/authentication/methods/abstract.rb +60 -0
- data/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
- data/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
- data/lib/net/ssh/authentication/methods/password.rb +39 -0
- data/lib/net/ssh/authentication/methods/publickey.rb +92 -0
- data/lib/net/ssh/authentication/pageant.rb +176 -0
- data/lib/net/ssh/authentication/session.rb +116 -0
- data/lib/net/ssh/buffer.rb +339 -0
- data/lib/net/ssh/buffered_io.rb +149 -0
- data/lib/net/ssh/config.rb +173 -0
- data/lib/net/ssh/connection/channel.rb +575 -454
- data/lib/net/ssh/connection/constants.rb +31 -45
- data/lib/net/ssh/connection/session.rb +569 -0
- data/lib/net/ssh/connection/term.rb +176 -88
- data/lib/net/ssh/errors.rb +83 -61
- data/lib/net/ssh/key_factory.rb +85 -0
- data/lib/net/ssh/known_hosts.rb +129 -0
- data/lib/net/ssh/loggable.rb +61 -0
- data/lib/net/ssh/packet.rb +102 -0
- data/lib/net/ssh/prompt.rb +93 -0
- data/lib/net/ssh/proxy/errors.rb +8 -28
- data/lib/net/ssh/proxy/http.rb +75 -107
- data/lib/net/ssh/proxy/socks4.rb +35 -48
- data/lib/net/ssh/proxy/socks5.rb +76 -108
- data/lib/net/ssh/service/forward.rb +267 -0
- data/lib/net/ssh/test.rb +89 -0
- data/lib/net/ssh/test/channel.rb +129 -0
- data/lib/net/ssh/test/extensions.rb +152 -0
- data/lib/net/ssh/test/kex.rb +44 -0
- data/lib/net/ssh/test/local_packet.rb +51 -0
- data/lib/net/ssh/test/packet.rb +81 -0
- data/lib/net/ssh/test/remote_packet.rb +38 -0
- data/lib/net/ssh/test/script.rb +157 -0
- data/lib/net/ssh/test/socket.rb +59 -0
- data/lib/net/ssh/transport/algorithms.rb +384 -0
- data/lib/net/ssh/transport/cipher_factory.rb +72 -0
- data/lib/net/ssh/transport/constants.rb +22 -58
- data/lib/net/ssh/transport/hmac.rb +31 -0
- data/lib/net/ssh/transport/hmac/abstract.rb +48 -0
- data/lib/net/ssh/transport/hmac/md5.rb +12 -0
- data/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
- data/lib/net/ssh/transport/hmac/none.rb +15 -0
- data/lib/net/ssh/transport/hmac/sha1.rb +13 -0
- data/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
- data/lib/net/ssh/transport/identity_cipher.rb +40 -0
- data/lib/net/ssh/transport/kex.rb +13 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
- data/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
- data/lib/net/ssh/{util → transport}/openssl.rb +22 -40
- data/lib/net/ssh/transport/packet_stream.rb +230 -0
- data/lib/net/ssh/transport/server_version.rb +61 -0
- data/lib/net/ssh/transport/session.rb +225 -303
- data/lib/net/ssh/transport/state.rb +170 -0
- data/lib/net/ssh/verifiers/lenient.rb +30 -0
- data/lib/net/ssh/verifiers/null.rb +12 -0
- data/lib/net/ssh/verifiers/strict.rb +53 -0
- data/lib/net/ssh/version.rb +57 -26
- data/net-ssh.gemspec +54 -0
- data/setup.rb +1585 -0
- data/test/authentication/methods/common.rb +28 -0
- data/test/authentication/methods/test_abstract.rb +51 -0
- data/test/authentication/methods/test_hostbased.rb +108 -0
- data/test/authentication/methods/test_keyboard_interactive.rb +98 -0
- data/test/authentication/methods/test_password.rb +50 -0
- data/test/authentication/methods/test_publickey.rb +123 -0
- data/test/authentication/test_agent.rb +205 -0
- data/test/authentication/test_key_manager.rb +100 -0
- data/test/authentication/test_session.rb +93 -0
- data/test/common.rb +106 -0
- data/test/configs/exact_match +8 -0
- data/test/configs/wild_cards +14 -0
- data/test/connection/test_channel.rb +452 -0
- data/test/connection/test_session.rb +483 -0
- data/test/test_all.rb +6 -0
- data/test/test_buffer.rb +336 -0
- data/test/test_buffered_io.rb +63 -0
- data/test/test_config.rb +78 -0
- data/test/test_key_factory.rb +67 -0
- data/test/transport/hmac/test_md5.rb +34 -0
- data/test/transport/hmac/test_md5_96.rb +25 -0
- data/test/transport/hmac/test_none.rb +34 -0
- data/test/transport/hmac/test_sha1.rb +34 -0
- data/test/transport/hmac/test_sha1_96.rb +25 -0
- data/test/transport/kex/test_diffie_hellman_group1_sha1.rb +146 -0
- data/test/transport/kex/test_diffie_hellman_group_exchange_sha1.rb +92 -0
- data/test/transport/test_algorithms.rb +302 -0
- data/test/transport/test_cipher_factory.rb +163 -0
- data/test/transport/test_hmac.rb +34 -0
- data/test/transport/test_identity_cipher.rb +40 -0
- data/test/transport/test_packet_stream.rb +433 -0
- data/test/transport/test_server_version.rb +55 -0
- data/test/transport/test_session.rb +312 -0
- data/test/transport/test_state.rb +173 -0
- metadata +102 -253
- data/ChangeLog +0 -560
- data/LICENSE +0 -7
- data/NEWS +0 -152
- data/README +0 -14
- data/bin/rb-keygen +0 -210
- data/doc/LICENSE-BSD +0 -27
- data/doc/LICENSE-GPL +0 -280
- data/doc/LICENSE-RUBY +0 -56
- data/doc/manual-html/chapter-1.html +0 -388
- data/doc/manual-html/chapter-2.html +0 -552
- data/doc/manual-html/chapter-3.html +0 -470
- data/doc/manual-html/chapter-4.html +0 -413
- data/doc/manual-html/chapter-5.html +0 -525
- data/doc/manual-html/chapter-6.html +0 -456
- data/doc/manual-html/chapter-7.html +0 -343
- data/doc/manual-html/index.html +0 -235
- data/doc/manual-html/stylesheets/manual.css +0 -270
- data/doc/manual-html/stylesheets/ruby.css +0 -17
- data/doc/manual/chapter.erb +0 -38
- data/doc/manual/example.erb +0 -18
- data/doc/manual/index.erb +0 -29
- data/doc/manual/manual.rb +0 -311
- data/doc/manual/manual.yml +0 -73
- data/doc/manual/page.erb +0 -87
- data/doc/manual/parts/0000.txt +0 -5
- data/doc/manual/parts/0001.txt +0 -3
- data/doc/manual/parts/0002.txt +0 -40
- data/doc/manual/parts/0003.txt +0 -6
- data/doc/manual/parts/0004.txt +0 -7
- data/doc/manual/parts/0005.txt +0 -1
- data/doc/manual/parts/0006.txt +0 -49
- data/doc/manual/parts/0007.txt +0 -67
- data/doc/manual/parts/0008.txt +0 -43
- data/doc/manual/parts/0009.txt +0 -14
- data/doc/manual/parts/0010.txt +0 -7
- data/doc/manual/parts/0011.txt +0 -14
- data/doc/manual/parts/0012.txt +0 -3
- data/doc/manual/parts/0013.txt +0 -20
- data/doc/manual/parts/0014.txt +0 -32
- data/doc/manual/parts/0015.txt +0 -14
- data/doc/manual/parts/0016.txt +0 -28
- data/doc/manual/parts/0017.txt +0 -50
- data/doc/manual/parts/0018.txt +0 -35
- data/doc/manual/parts/0019.txt +0 -7
- data/doc/manual/parts/0020.txt +0 -72
- data/doc/manual/parts/0021.txt +0 -50
- data/doc/manual/parts/0022.txt +0 -42
- data/doc/manual/parts/0023.txt +0 -51
- data/doc/manual/parts/0024.txt +0 -18
- data/doc/manual/parts/0025.txt +0 -18
- data/doc/manual/parts/0026.txt +0 -15
- data/doc/manual/parts/0027.txt +0 -37
- data/doc/manual/parts/0028.txt +0 -16
- data/doc/manual/parts/0029.txt +0 -1
- data/doc/manual/parts/0030.txt +0 -52
- data/doc/manual/parts/0031.txt +0 -25
- data/doc/manual/stylesheets/manual.css +0 -270
- data/doc/manual/stylesheets/ruby.css +0 -17
- data/doc/manual/tutorial.erb +0 -30
- data/examples/auth-forward.rb +0 -41
- data/examples/channel-demo.rb +0 -81
- data/examples/port-forward.rb +0 -51
- data/examples/process-demo.rb +0 -91
- data/examples/remote-net-port-forward.rb +0 -45
- data/examples/remote-port-forward.rb +0 -80
- data/examples/shell-demo.rb +0 -46
- data/examples/ssh-client.rb +0 -67
- data/examples/sync-shell-demo.rb +0 -69
- data/examples/tail-demo.rb +0 -49
- data/lib/net/ssh/connection/driver.rb +0 -446
- data/lib/net/ssh/connection/services.rb +0 -72
- data/lib/net/ssh/host-key-verifier.rb +0 -52
- data/lib/net/ssh/known-hosts.rb +0 -96
- data/lib/net/ssh/lenient-host-key-verifier.rb +0 -25
- data/lib/net/ssh/null-host-key-verifier.rb +0 -14
- data/lib/net/ssh/service/agentforward/driver.rb +0 -78
- data/lib/net/ssh/service/agentforward/services.rb +0 -41
- data/lib/net/ssh/service/forward/driver.rb +0 -319
- data/lib/net/ssh/service/forward/local-network-handler.rb +0 -71
- data/lib/net/ssh/service/forward/remote-network-handler.rb +0 -83
- data/lib/net/ssh/service/forward/services.rb +0 -76
- data/lib/net/ssh/service/process/driver.rb +0 -153
- data/lib/net/ssh/service/process/open.rb +0 -193
- data/lib/net/ssh/service/process/popen3.rb +0 -178
- data/lib/net/ssh/service/process/services.rb +0 -66
- data/lib/net/ssh/service/services.rb +0 -60
- data/lib/net/ssh/service/shell/driver.rb +0 -86
- data/lib/net/ssh/service/shell/services.rb +0 -54
- data/lib/net/ssh/service/shell/shell.rb +0 -222
- data/lib/net/ssh/service/shell/sync.rb +0 -114
- data/lib/net/ssh/session.rb +0 -305
- data/lib/net/ssh/transport/algorithm-negotiator.rb +0 -275
- data/lib/net/ssh/transport/compress/compressor.rb +0 -53
- data/lib/net/ssh/transport/compress/decompressor.rb +0 -53
- data/lib/net/ssh/transport/compress/none-compressor.rb +0 -39
- data/lib/net/ssh/transport/compress/none-decompressor.rb +0 -39
- data/lib/net/ssh/transport/compress/services.rb +0 -68
- data/lib/net/ssh/transport/compress/zlib-compressor.rb +0 -60
- data/lib/net/ssh/transport/compress/zlib-decompressor.rb +0 -52
- data/lib/net/ssh/transport/errors.rb +0 -47
- data/lib/net/ssh/transport/identity-cipher.rb +0 -61
- data/lib/net/ssh/transport/kex/dh-gex.rb +0 -106
- data/lib/net/ssh/transport/kex/dh.rb +0 -249
- data/lib/net/ssh/transport/kex/services.rb +0 -62
- data/lib/net/ssh/transport/ossl/buffer-factory.rb +0 -52
- data/lib/net/ssh/transport/ossl/buffer.rb +0 -87
- data/lib/net/ssh/transport/ossl/cipher-factory.rb +0 -98
- data/lib/net/ssh/transport/ossl/digest-factory.rb +0 -51
- data/lib/net/ssh/transport/ossl/hmac-factory.rb +0 -71
- data/lib/net/ssh/transport/ossl/hmac/hmac.rb +0 -62
- data/lib/net/ssh/transport/ossl/hmac/md5-96.rb +0 -44
- data/lib/net/ssh/transport/ossl/hmac/md5.rb +0 -46
- data/lib/net/ssh/transport/ossl/hmac/none.rb +0 -46
- data/lib/net/ssh/transport/ossl/hmac/services.rb +0 -68
- data/lib/net/ssh/transport/ossl/hmac/sha1-96.rb +0 -44
- data/lib/net/ssh/transport/ossl/hmac/sha1.rb +0 -45
- data/lib/net/ssh/transport/ossl/key-factory.rb +0 -116
- data/lib/net/ssh/transport/ossl/services.rb +0 -149
- data/lib/net/ssh/transport/packet-stream.rb +0 -236
- data/lib/net/ssh/transport/services.rb +0 -146
- data/lib/net/ssh/transport/version-negotiator.rb +0 -73
- data/lib/net/ssh/userauth/agent.rb +0 -222
- data/lib/net/ssh/userauth/constants.rb +0 -35
- data/lib/net/ssh/userauth/driver.rb +0 -183
- data/lib/net/ssh/userauth/methods/hostbased.rb +0 -119
- data/lib/net/ssh/userauth/methods/keyboard-interactive.rb +0 -104
- data/lib/net/ssh/userauth/methods/password.rb +0 -70
- data/lib/net/ssh/userauth/methods/publickey.rb +0 -137
- data/lib/net/ssh/userauth/methods/services.rb +0 -90
- data/lib/net/ssh/userauth/pageant.rb +0 -197
- data/lib/net/ssh/userauth/services.rb +0 -141
- data/lib/net/ssh/userauth/userkeys.rb +0 -258
- data/lib/net/ssh/util/buffer.rb +0 -274
- data/lib/net/ssh/util/prompter.rb +0 -73
- data/test/ALL-TESTS.rb +0 -18
- data/test/connection/tc_channel.rb +0 -136
- data/test/connection/tc_driver.rb +0 -287
- data/test/connection/tc_integration.rb +0 -87
- data/test/proxy/tc_http.rb +0 -209
- data/test/proxy/tc_socks4.rb +0 -148
- data/test/proxy/tc_socks5.rb +0 -214
- data/test/service/agentforward/tc_driver.rb +0 -138
- data/test/service/forward/tc_driver.rb +0 -289
- data/test/service/forward/tc_local_network_handler.rb +0 -123
- data/test/service/forward/tc_remote_network_handler.rb +0 -111
- data/test/service/process/tc_driver.rb +0 -79
- data/test/service/process/tc_integration.rb +0 -119
- data/test/service/process/tc_open.rb +0 -179
- data/test/service/process/tc_popen3.rb +0 -164
- data/test/tc_integration.rb +0 -80
- data/test/transport/compress/tc_none_compress.rb +0 -41
- data/test/transport/compress/tc_none_decompress.rb +0 -45
- data/test/transport/compress/tc_zlib_compress.rb +0 -61
- data/test/transport/compress/tc_zlib_decompress.rb +0 -48
- data/test/transport/kex/tc_dh.rb +0 -312
- data/test/transport/kex/tc_dh_gex.rb +0 -71
- data/test/transport/ossl/fixtures/dsa-encrypted +0 -15
- data/test/transport/ossl/fixtures/dsa-encrypted-bad +0 -15
- data/test/transport/ossl/fixtures/dsa-unencrypted +0 -12
- data/test/transport/ossl/fixtures/dsa-unencrypted-bad +0 -12
- data/test/transport/ossl/fixtures/dsa-unencrypted.pub +0 -1
- data/test/transport/ossl/fixtures/not-a-private-key +0 -4
- data/test/transport/ossl/fixtures/not-supported +0 -2
- data/test/transport/ossl/fixtures/rsa-encrypted +0 -18
- data/test/transport/ossl/fixtures/rsa-encrypted-bad +0 -18
- data/test/transport/ossl/fixtures/rsa-unencrypted +0 -15
- data/test/transport/ossl/fixtures/rsa-unencrypted-bad +0 -15
- data/test/transport/ossl/fixtures/rsa-unencrypted.pub +0 -1
- data/test/transport/ossl/hmac/tc_hmac.rb +0 -58
- data/test/transport/ossl/hmac/tc_md5.rb +0 -50
- data/test/transport/ossl/hmac/tc_md5_96.rb +0 -50
- data/test/transport/ossl/hmac/tc_none.rb +0 -50
- data/test/transport/ossl/hmac/tc_sha1.rb +0 -50
- data/test/transport/ossl/hmac/tc_sha1_96.rb +0 -50
- data/test/transport/ossl/tc_buffer.rb +0 -97
- data/test/transport/ossl/tc_buffer_factory.rb +0 -67
- data/test/transport/ossl/tc_cipher_factory.rb +0 -84
- data/test/transport/ossl/tc_digest_factory.rb +0 -39
- data/test/transport/ossl/tc_hmac_factory.rb +0 -72
- data/test/transport/ossl/tc_key_factory.rb +0 -199
- data/test/transport/tc_algorithm_negotiator.rb +0 -170
- data/test/transport/tc_identity_cipher.rb +0 -52
- data/test/transport/tc_integration.rb +0 -115
- data/test/transport/tc_packet_stream.rb +0 -184
- data/test/transport/tc_session.rb +0 -296
- data/test/transport/tc_version_negotiator.rb +0 -86
- data/test/userauth/methods/tc_hostbased.rb +0 -136
- data/test/userauth/methods/tc_password.rb +0 -89
- data/test/userauth/methods/tc_publickey.rb +0 -167
- data/test/userauth/tc_agent.rb +0 -223
- data/test/userauth/tc_driver.rb +0 -190
- data/test/userauth/tc_integration.rb +0 -97
- data/test/userauth/tc_userkeys.rb +0 -265
- data/test/util/tc_buffer.rb +0 -217
data/doc/manual/parts/0027.txt
DELETED
@@ -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.
|
data/doc/manual/parts/0028.txt
DELETED
@@ -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.
|
data/doc/manual/parts/0029.txt
DELETED
@@ -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.
|
data/doc/manual/parts/0030.txt
DELETED
@@ -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.
|
data/doc/manual/parts/0031.txt
DELETED
@@ -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; }
|
data/doc/manual/tutorial.erb
DELETED
@@ -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 %>
|