Methods
Classes and Modules
Module Net::SSH::Transport::CompressModule Net::SSH::Transport::Constants
Module Net::SSH::Transport::DisconnectReasons
Module Net::SSH::Transport::Kex
Module Net::SSH::Transport::OSSL
Class Net::SSH::Transport::AlgorithmNegotiator
Class Net::SSH::Transport::CipherNotFound
Class Net::SSH::Transport::DigestTypeNotFound
Class Net::SSH::Transport::Disconnect
Class Net::SSH::Transport::Exception
Class Net::SSH::Transport::HMACAlgorithmNotFound
Class Net::SSH::Transport::IdentityCipher
Class Net::SSH::Transport::IncomingPacketStream
Class Net::SSH::Transport::KeyTypeNotFound
Class Net::SSH::Transport::OutgoingPacketStream
Class Net::SSH::Transport::PacketStream
Class Net::SSH::Transport::Session
Class Net::SSH::Transport::VersionNegotiator
Public Instance methods
Register the services that together implement the SSH transport layer.
[ show source ]
# File lib/net/ssh/transport/services.rb, line 22
22: def register_services( container )
23: container.namespace_define :transport do |b|
24: b.kex_names { Hash.new }
25: b.compression_algorithms { Hash.new }
26: b.decompression_algorithms { Hash.new }
27:
28: b.cipher_factories { Hash.new }
29: b.hmac_factories { Hash.new }
30: b.key_factories { Hash.new }
31: b.buffer_factories { Hash.new }
32: b.bn_factories { Hash.new }
33: b.digest_factories { Hash.new }
34:
35: b.ciphers( :model => :prototype ) { |c,|
36: c.cipher_factories.fetch( c.crypto_backend ) }
37:
38: b.hmacs( :model => :prototype ) { |c,|
39: c.hmac_factories.fetch( c.crypto_backend ) }
40:
41: b.keys( :model => :prototype ) { |c,|
42: c.key_factories.fetch( c.crypto_backend ) }
43:
44: b.buffers( :model => :prototype ) { |c,|
45: c.buffer_factories.fetch( c.crypto_backend ) }
46:
47: b.bns( :model => :prototype ) { |c,|
48: c.bn_factories.fetch( c.crypto_backend ) }
49:
50: b.digesters( :model => :prototype ) { |c,|
51: c.digest_factories.fetch( c.crypto_backend ) }
52:
53: b.identity_cipher do
54: require 'net/ssh/transport/identity-cipher'
55: IdentityCipher.new
56: end
57:
58: b.outgoing_packet_stream :model => :prototype_deferred do |c,|
59: require 'net/ssh/transport/packet-stream'
60: OutgoingPacketStream.new(
61: c.ciphers, c.hmacs, c.compression_algorithms )
62: end
63:
64: b.incoming_packet_stream :model => :prototype_deferred do |c,point|
65: require 'net/ssh/transport/packet-stream'
66: stream = IncomingPacketStream.new(
67: c.ciphers, c.hmacs, c.decompression_algorithms )
68: stream.buffers = c.buffers
69: stream.log = c.log_for( point )
70: stream
71: end
72:
73: b.algorithms do
74: Hash[
75: :host_key => [ "ssh-dss", "ssh-rsa" ],
76: :kex => [ "diffie-hellman-group-exchange-sha1",
77: "diffie-hellman-group1-sha1" ],
78: :encryption => [ "3des-cbc",
79: "aes128-cbc",
80: "blowfish-cbc",
81: "aes256-cbc",
82: "aes192-cbc",
83: "idea-cbc",
84: "none" ],
85: :hmac => [ "hmac-md5",
86: "hmac-sha1",
87: "hmac-md5-96",
88: "hmac-sha1-96",
89: "none" ],
90: :compression => [ "none", "zlib" ],
91: :languages => []
92: ]
93: end
94:
95: b.default_ssh_port { 22 }
96:
97: b.socket_factory do
98: require 'socket'
99: TCPSocket
100: end
101:
102: b.version_negotiator do |c,point|
103: require 'net/ssh/transport/version-negotiator'
104: VersionNegotiator.new( c.log_for( point ) )
105: end
106:
107: b.algorithm_negotiator do |c,point|
108: require 'net/ssh/transport/algorithm-negotiator'
109: AlgorithmNegotiator.new(
110: c.log_for( point ),
111: c.algorithms,
112: c.buffers )
113: end
114:
115: b.session do |c,point|
116: require 'net/ssh/transport/session'
117:
118: args = [ c[:transport_host] ]
119: args << c[:transport_options] if c.knows_key?(:transport_options)
120:
121: Session.new( *args ) do |s|
122: s.logger = c[:log_for, point]
123: s.default_port = c[:default_ssh_port]
124: s.version_negotiator = c[:version_negotiator]
125: s.algorithm_negotiator = c[:algorithm_negotiator]
126: s.socket_factory = c[:socket_factory]
127: s.packet_sender = c[:outgoing_packet_stream]
128: s.packet_receiver = c[:incoming_packet_stream]
129: s.ciphers = c[:ciphers]
130: s.hmacs = c[:hmacs]
131: s.kexs = c[:kex_names]
132: s.compressors = c[:compression_algorithms]
133: s.decompressors = c[:decompression_algorithms]
134: end
135: end
136:
137: b.require 'net/ssh/transport/ossl/services', "#{self}::OSSL"
138: b.require 'net/ssh/transport/compress/services', "#{self}::Compress"
139: b.require 'net/ssh/transport/kex/services', "#{self}::Kex"
140: end
141: end