hrr_rb_ssh 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/demo/server.rb +23 -3
- data/hrr_rb_ssh.gemspec +2 -2
- data/lib/hrr_rb_ssh/authentication/method/method.rb +34 -0
- data/lib/hrr_rb_ssh/authentication/method/none.rb +5 -14
- data/lib/hrr_rb_ssh/authentication/method/password.rb +6 -12
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/algorithm.rb +41 -0
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/codable.rb +33 -0
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/ssh_dss.rb +105 -0
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/ssh_rsa.rb +85 -0
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm.rb +28 -0
- data/lib/hrr_rb_ssh/authentication/method/publickey.rb +9 -25
- data/lib/hrr_rb_ssh/authentication/method.rb +12 -9
- data/lib/hrr_rb_ssh/connection/channel/channel_type/channel_type.rb +30 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/env/context.rb +46 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/env.rb +34 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec/context.rb +44 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec.rb +34 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req/context.rb +54 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req.rb +34 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/request_type.rb +34 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell/context.rb +41 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell.rb +34 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem/context.rb +44 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem.rb +34 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type.rb +33 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session.rb +30 -0
- data/lib/hrr_rb_ssh/connection/channel/channel_type.rb +25 -0
- data/lib/hrr_rb_ssh/connection/channel.rb +2 -12
- data/lib/hrr_rb_ssh/transport/compression_algorithm/compression_algorithm.rb +34 -0
- data/lib/hrr_rb_ssh/transport/compression_algorithm/functionable.rb +31 -0
- data/lib/hrr_rb_ssh/transport/compression_algorithm/none.rb +7 -19
- data/lib/hrr_rb_ssh/transport/compression_algorithm/unfunctionable.rb +20 -0
- data/lib/hrr_rb_ssh/transport/compression_algorithm/zlib.rb +7 -24
- data/lib/hrr_rb_ssh/transport/compression_algorithm.rb +11 -9
- data/lib/hrr_rb_ssh/transport/direction.rb +11 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes128_cbc.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes128_ctr.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes192_cbc.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes192_ctr.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes256_cbc.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes256_ctr.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/arcfour.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/blowfish_cbc.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/cast128_cbc.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/encryption_algorithm.rb +34 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/functionable.rb +61 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/none.rb +6 -33
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/three_des_cbc.rb +19 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/unfunctionable.rb +35 -0
- data/lib/hrr_rb_ssh/transport/encryption_algorithm.rb +20 -9
- data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman.rb +3 -4
- data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman_group14_sha1.rb +4 -8
- data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman_group1_sha1.rb +4 -8
- data/lib/hrr_rb_ssh/transport/kex_algorithm/kex_algorithm.rb +34 -0
- data/lib/hrr_rb_ssh/transport/kex_algorithm.rb +10 -9
- data/lib/hrr_rb_ssh/transport/mac_algorithm/functionable.rb +32 -0
- data/lib/hrr_rb_ssh/transport/mac_algorithm/hmac_md5.rb +21 -0
- data/lib/hrr_rb_ssh/transport/mac_algorithm/hmac_md5_96.rb +21 -0
- data/lib/hrr_rb_ssh/transport/mac_algorithm/hmac_sha1.rb +5 -29
- data/lib/hrr_rb_ssh/transport/mac_algorithm/hmac_sha1_96.rb +21 -0
- data/lib/hrr_rb_ssh/transport/mac_algorithm/mac_algorithm.rb +34 -0
- data/lib/hrr_rb_ssh/transport/mac_algorithm/none.rb +6 -22
- data/lib/hrr_rb_ssh/transport/mac_algorithm/unfunctionable.rb +24 -0
- data/lib/hrr_rb_ssh/transport/mac_algorithm.rb +14 -9
- data/lib/hrr_rb_ssh/transport/server_host_key_algorithm/server_host_key_algorithm.rb +34 -0
- data/lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_dss.rb +106 -0
- data/lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_rsa.rb +4 -11
- data/lib/hrr_rb_ssh/transport/server_host_key_algorithm.rb +10 -8
- data/lib/hrr_rb_ssh/transport.rb +23 -15
- data/lib/hrr_rb_ssh/version.rb +1 -1
- metadata +51 -17
- data/lib/hrr_rb_ssh/authentication/method/publickey/ssh_rsa.rb +0 -116
- data/lib/hrr_rb_ssh/connection/channel/session/env/context.rb +0 -43
- data/lib/hrr_rb_ssh/connection/channel/session/env.rb +0 -31
- data/lib/hrr_rb_ssh/connection/channel/session/exec/context.rb +0 -41
- data/lib/hrr_rb_ssh/connection/channel/session/exec.rb +0 -31
- data/lib/hrr_rb_ssh/connection/channel/session/pty_req/context.rb +0 -50
- data/lib/hrr_rb_ssh/connection/channel/session/pty_req.rb +0 -31
- data/lib/hrr_rb_ssh/connection/channel/session/shell/context.rb +0 -37
- data/lib/hrr_rb_ssh/connection/channel/session/shell.rb +0 -31
- data/lib/hrr_rb_ssh/connection/channel/session/subsystem/context.rb +0 -40
- data/lib/hrr_rb_ssh/connection/channel/session/subsystem.rb +0 -31
- data/lib/hrr_rb_ssh/connection/channel/session.rb +0 -31
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/aes_128_cbc.rb +0 -73
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/logger'
|
5
|
+
require 'hrr_rb_ssh/connection/request_handler'
|
6
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/request_type'
|
7
|
+
|
8
|
+
module HrrRbSsh
|
9
|
+
class Connection
|
10
|
+
class Channel
|
11
|
+
module ChannelType
|
12
|
+
class Session
|
13
|
+
module RequestType
|
14
|
+
class Env < RequestType
|
15
|
+
NAME = 'env'
|
16
|
+
|
17
|
+
def self.run proc_chain, username, io, variables, message, options
|
18
|
+
logger = HrrRbSsh::Logger.new self.class.name
|
19
|
+
|
20
|
+
context = Context.new proc_chain, username, io, variables, message
|
21
|
+
handler = options.fetch('connection_channel_request_env', RequestHandler.new {})
|
22
|
+
handler.run context
|
23
|
+
|
24
|
+
proc_chain.connect context.chain_proc
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/env/context'
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/logger'
|
5
|
+
|
6
|
+
module HrrRbSsh
|
7
|
+
class Connection
|
8
|
+
class Channel
|
9
|
+
module ChannelType
|
10
|
+
class Session
|
11
|
+
module RequestType
|
12
|
+
class Exec
|
13
|
+
class Context
|
14
|
+
attr_reader \
|
15
|
+
:logger,
|
16
|
+
:username,
|
17
|
+
:io,
|
18
|
+
:variables,
|
19
|
+
:vars,
|
20
|
+
:command
|
21
|
+
|
22
|
+
def initialize proc_chain, username, io, variables, message
|
23
|
+
@logger = HrrRbSsh::Logger.new self.class.name
|
24
|
+
|
25
|
+
@proc_chain = proc_chain
|
26
|
+
@username = username
|
27
|
+
@io = io
|
28
|
+
@variables = variables
|
29
|
+
@vars = variables
|
30
|
+
|
31
|
+
@command = message['command']
|
32
|
+
end
|
33
|
+
|
34
|
+
def chain_proc &block
|
35
|
+
@proc = block || @proc
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/logger'
|
5
|
+
require 'hrr_rb_ssh/connection/request_handler'
|
6
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/request_type'
|
7
|
+
|
8
|
+
module HrrRbSsh
|
9
|
+
class Connection
|
10
|
+
class Channel
|
11
|
+
module ChannelType
|
12
|
+
class Session
|
13
|
+
module RequestType
|
14
|
+
class Exec < RequestType
|
15
|
+
NAME = 'exec'
|
16
|
+
|
17
|
+
def self.run proc_chain, username, io, variables, message, options
|
18
|
+
logger = HrrRbSsh::Logger.new self.class.name
|
19
|
+
|
20
|
+
context = Context.new proc_chain, username, io, variables, message
|
21
|
+
handler = options.fetch('connection_channel_request_exec', RequestHandler.new {})
|
22
|
+
handler.run context
|
23
|
+
|
24
|
+
proc_chain.connect context.chain_proc
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec/context'
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/logger'
|
5
|
+
|
6
|
+
module HrrRbSsh
|
7
|
+
class Connection
|
8
|
+
class Channel
|
9
|
+
module ChannelType
|
10
|
+
class Session
|
11
|
+
module RequestType
|
12
|
+
class PtyReq
|
13
|
+
class Context
|
14
|
+
attr_reader \
|
15
|
+
:logger,
|
16
|
+
:username,
|
17
|
+
:io,
|
18
|
+
:variables,
|
19
|
+
:vars,
|
20
|
+
:term_environment_variable_value,
|
21
|
+
:terminal_width_characters,
|
22
|
+
:terminal_height_rows,
|
23
|
+
:terminal_width_pixels,
|
24
|
+
:terminal_height_pixels,
|
25
|
+
:encoded_terminal_modes
|
26
|
+
|
27
|
+
def initialize proc_chain, username, io, variables, message
|
28
|
+
@logger = HrrRbSsh::Logger.new self.class.name
|
29
|
+
|
30
|
+
@proc_chain = proc_chain
|
31
|
+
@username = username
|
32
|
+
@io = io
|
33
|
+
@variables = variables
|
34
|
+
@vars = variables
|
35
|
+
|
36
|
+
@term_environment_variable_value = message['TERM environment variable value']
|
37
|
+
@terminal_width_characters = message['terminal width, characters']
|
38
|
+
@terminal_height_rows = message['terminal height, rows']
|
39
|
+
@terminal_width_pixels = message['terminal width, pixels']
|
40
|
+
@terminal_height_pixels = message['terminal height, pixels']
|
41
|
+
@encoded_terminal_modes = message['encoded terminal modes']
|
42
|
+
end
|
43
|
+
|
44
|
+
def chain_proc &block
|
45
|
+
@proc = block || @proc
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/logger'
|
5
|
+
require 'hrr_rb_ssh/connection/request_handler'
|
6
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/request_type'
|
7
|
+
|
8
|
+
module HrrRbSsh
|
9
|
+
class Connection
|
10
|
+
class Channel
|
11
|
+
module ChannelType
|
12
|
+
class Session
|
13
|
+
module RequestType
|
14
|
+
class PtyReq < RequestType
|
15
|
+
NAME = 'pty-req'
|
16
|
+
|
17
|
+
def self.run proc_chain, username, io, variables, message, options
|
18
|
+
logger = HrrRbSsh::Logger.new self.class.name
|
19
|
+
|
20
|
+
context = Context.new proc_chain, username, io, variables, message
|
21
|
+
handler = options.fetch('connection_channel_request_pty_req', RequestHandler.new {})
|
22
|
+
handler.run context
|
23
|
+
|
24
|
+
proc_chain.connect context.chain_proc
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req/context'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
module HrrRbSsh
|
5
|
+
class Connection
|
6
|
+
class Channel
|
7
|
+
module ChannelType
|
8
|
+
class Session
|
9
|
+
module RequestType
|
10
|
+
class RequestType
|
11
|
+
@@list = Array.new
|
12
|
+
|
13
|
+
def self.inherited klass
|
14
|
+
@@list.push klass
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.list
|
18
|
+
@@list
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.name_list
|
22
|
+
@@list.map{ |klass| klass::NAME }
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.[] key
|
26
|
+
@@list.find{ |klass| key == klass::NAME }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/logger'
|
5
|
+
|
6
|
+
module HrrRbSsh
|
7
|
+
class Connection
|
8
|
+
class Channel
|
9
|
+
module ChannelType
|
10
|
+
class Session
|
11
|
+
module RequestType
|
12
|
+
class Shell
|
13
|
+
class Context
|
14
|
+
attr_reader \
|
15
|
+
:logger,
|
16
|
+
:username,
|
17
|
+
:io,
|
18
|
+
:variables,
|
19
|
+
:vars
|
20
|
+
|
21
|
+
def initialize proc_chain, username, io, variables, message
|
22
|
+
@logger = HrrRbSsh::Logger.new self.class.name
|
23
|
+
|
24
|
+
@proc_chain = proc_chain
|
25
|
+
@username = username
|
26
|
+
@io = io
|
27
|
+
@variables = variables
|
28
|
+
@vars = variables
|
29
|
+
end
|
30
|
+
|
31
|
+
def chain_proc &block
|
32
|
+
@proc = block || @proc
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/logger'
|
5
|
+
require 'hrr_rb_ssh/connection/request_handler'
|
6
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/request_type'
|
7
|
+
|
8
|
+
module HrrRbSsh
|
9
|
+
class Connection
|
10
|
+
class Channel
|
11
|
+
module ChannelType
|
12
|
+
class Session
|
13
|
+
module RequestType
|
14
|
+
class Shell < RequestType
|
15
|
+
NAME = 'shell'
|
16
|
+
|
17
|
+
def self.run proc_chain, username, io, variables, message, options
|
18
|
+
logger = HrrRbSsh::Logger.new self.class.name
|
19
|
+
|
20
|
+
context = Context.new proc_chain, username, io, variables, message
|
21
|
+
handler = options.fetch('connection_channel_request_shell', RequestHandler.new {})
|
22
|
+
handler.run context
|
23
|
+
|
24
|
+
proc_chain.connect context.chain_proc
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell/context'
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/logger'
|
5
|
+
|
6
|
+
module HrrRbSsh
|
7
|
+
class Connection
|
8
|
+
class Channel
|
9
|
+
module ChannelType
|
10
|
+
class Session
|
11
|
+
module RequestType
|
12
|
+
class Subsystem
|
13
|
+
class Context
|
14
|
+
attr_reader \
|
15
|
+
:logger,
|
16
|
+
:username,
|
17
|
+
:io,
|
18
|
+
:variables,
|
19
|
+
:vars,
|
20
|
+
:subsystem_name
|
21
|
+
|
22
|
+
def initialize proc_chain, username, io, variables, message
|
23
|
+
@logger = HrrRbSsh::Logger.new self.class.name
|
24
|
+
|
25
|
+
@proc_chain = proc_chain
|
26
|
+
@username = username
|
27
|
+
@io = io
|
28
|
+
@variables = variables
|
29
|
+
@vars = variables
|
30
|
+
|
31
|
+
@subsystem_name = message['subsystem name']
|
32
|
+
end
|
33
|
+
|
34
|
+
def chain_proc &block
|
35
|
+
@proc = block || @proc
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/logger'
|
5
|
+
require 'hrr_rb_ssh/connection/request_handler'
|
6
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/request_type'
|
7
|
+
|
8
|
+
module HrrRbSsh
|
9
|
+
class Connection
|
10
|
+
class Channel
|
11
|
+
module ChannelType
|
12
|
+
class Session
|
13
|
+
module RequestType
|
14
|
+
class Subsystem < RequestType
|
15
|
+
NAME = 'subsystem'
|
16
|
+
|
17
|
+
def self.run proc_chain, username, io, variables, message, options
|
18
|
+
logger = HrrRbSsh::Logger.new self.class.name
|
19
|
+
|
20
|
+
context = Context.new proc_chain, username, io, variables, message
|
21
|
+
handler = options.fetch('connection_channel_request_subsystem', RequestHandler.new {})
|
22
|
+
handler.run context
|
23
|
+
|
24
|
+
proc_chain.connect context.chain_proc
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem/context'
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
module HrrRbSsh
|
5
|
+
class Connection
|
6
|
+
class Channel
|
7
|
+
module ChannelType
|
8
|
+
class Session
|
9
|
+
module RequestType
|
10
|
+
def self.list
|
11
|
+
RequestType.list
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.name_list
|
15
|
+
RequestType.name_list
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.[] key
|
19
|
+
RequestType[key]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/request_type'
|
29
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req'
|
30
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/env'
|
31
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell'
|
32
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec'
|
33
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem'
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/channel_type'
|
5
|
+
|
6
|
+
module HrrRbSsh
|
7
|
+
class Connection
|
8
|
+
class Channel
|
9
|
+
module ChannelType
|
10
|
+
class Session < ChannelType
|
11
|
+
NAME = 'session'
|
12
|
+
|
13
|
+
def self.list
|
14
|
+
RequestType.list
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.name_list
|
18
|
+
RequestType.name_list
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.[] key
|
22
|
+
RequestType[key]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session/request_type'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
module HrrRbSsh
|
5
|
+
class Connection
|
6
|
+
class Channel
|
7
|
+
module ChannelType
|
8
|
+
def self.list
|
9
|
+
ChannelType.list
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.name_list
|
13
|
+
ChannelType.name_list
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.[] key
|
17
|
+
ChannelType[key]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/channel_type'
|
25
|
+
require 'hrr_rb_ssh/connection/channel/channel_type/session'
|
@@ -4,21 +4,11 @@
|
|
4
4
|
require 'socket'
|
5
5
|
require 'hrr_rb_ssh/logger'
|
6
6
|
require 'hrr_rb_ssh/connection/channel/proc_chain'
|
7
|
-
require 'hrr_rb_ssh/connection/channel/
|
7
|
+
require 'hrr_rb_ssh/connection/channel/channel_type'
|
8
8
|
|
9
9
|
module HrrRbSsh
|
10
10
|
class Connection
|
11
11
|
class Channel
|
12
|
-
@@type_list ||= Hash.new
|
13
|
-
|
14
|
-
def self.[] key
|
15
|
-
@@type_list[key]
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.type_list
|
19
|
-
@@type_list.keys
|
20
|
-
end
|
21
|
-
|
22
12
|
INITIAL_WINDOW_SIZE = 100000
|
23
13
|
MAXIMUM_PACKET_SIZE = 100000
|
24
14
|
|
@@ -219,7 +209,7 @@ module HrrRbSsh
|
|
219
209
|
|
220
210
|
def request message, variables
|
221
211
|
request_type = message['request type']
|
222
|
-
|
212
|
+
ChannelType[@channel_type][request_type].run @proc_chain, @connection.username, @request_handler_io, variables, message, @connection.options
|
223
213
|
end
|
224
214
|
|
225
215
|
def send_channel_success
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/logger'
|
5
|
+
|
6
|
+
module HrrRbSsh
|
7
|
+
class Transport
|
8
|
+
class CompressionAlgorithm
|
9
|
+
class CompressionAlgorithm
|
10
|
+
@@list = Array.new
|
11
|
+
|
12
|
+
def self.inherited klass
|
13
|
+
@@list.push klass
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.list
|
17
|
+
@@list
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.name_list
|
21
|
+
@@list.map{ |klass| klass::NAME }
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.[] key
|
25
|
+
@@list.find{ |klass| key == klass::NAME }
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize direction
|
29
|
+
@logger = HrrRbSsh::Logger.new self.class.name
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'zlib'
|
5
|
+
|
6
|
+
module HrrRbSsh
|
7
|
+
class Transport
|
8
|
+
class CompressionAlgorithm
|
9
|
+
module Functionable
|
10
|
+
def initialize direction
|
11
|
+
super
|
12
|
+
|
13
|
+
case direction
|
14
|
+
when HrrRbSsh::Transport::Direction::OUTGOING
|
15
|
+
@deflator = ::Zlib::Deflate.new
|
16
|
+
when HrrRbSsh::Transport::Direction::INCOMING
|
17
|
+
@inflator = ::Zlib::Inflate.new
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def deflate data
|
22
|
+
@deflator.deflate(data, ::Zlib::SYNC_FLUSH)
|
23
|
+
end
|
24
|
+
|
25
|
+
def inflate data
|
26
|
+
@inflator.inflate(data)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -1,32 +1,20 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
# vim: et ts=2 sw=2
|
3
3
|
|
4
|
-
require 'hrr_rb_ssh/
|
4
|
+
require 'hrr_rb_ssh/transport/compression_algorithm/compression_algorithm'
|
5
|
+
require 'hrr_rb_ssh/transport/compression_algorithm/unfunctionable'
|
5
6
|
|
6
7
|
module HrrRbSsh
|
7
8
|
class Transport
|
8
9
|
class CompressionAlgorithm
|
9
|
-
|
10
|
-
'none'
|
11
|
-
]
|
10
|
+
class None < CompressionAlgorithm
|
11
|
+
NAME = 'none'
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
@logger = HrrRbSsh::Logger.new self.class.name
|
13
|
+
def initialize direction=nil
|
14
|
+
super
|
16
15
|
end
|
17
16
|
|
18
|
-
|
19
|
-
data
|
20
|
-
end
|
21
|
-
|
22
|
-
def inflate data
|
23
|
-
data
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
@@list ||= Hash.new
|
28
|
-
name_list.each do |name|
|
29
|
-
@@list[name] = None
|
17
|
+
include Unfunctionable
|
30
18
|
end
|
31
19
|
end
|
32
20
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# vim: et ts=2 sw=2
|
3
|
+
|
4
|
+
require 'hrr_rb_ssh/logger'
|
5
|
+
|
6
|
+
module HrrRbSsh
|
7
|
+
class Transport
|
8
|
+
class CompressionAlgorithm
|
9
|
+
module Unfunctionable
|
10
|
+
def deflate data
|
11
|
+
data
|
12
|
+
end
|
13
|
+
|
14
|
+
def inflate data
|
15
|
+
data
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|