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