hrr_rb_ssh 0.3.0.pre1 → 0.4.2
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.
- checksums.yaml +4 -4
- data/.gitignore +0 -3
- data/.travis.yml +1 -0
- data/README.md +208 -46
- data/demo/client.rb +71 -0
- data/demo/echo_server.rb +8 -3
- data/demo/more_flexible_auth.rb +105 -0
- data/demo/multi_step_auth.rb +99 -0
- data/demo/server.rb +10 -4
- data/demo/subsystem_echo_server.rb +8 -3
- data/hrr_rb_ssh.gemspec +6 -6
- data/lib/hrr_rb_ssh.rb +1 -1
- data/lib/hrr_rb_ssh/algorithm/publickey.rb +0 -1
- data/lib/hrr_rb_ssh/algorithm/publickey/ecdsa_sha2.rb +12 -9
- data/lib/hrr_rb_ssh/algorithm/publickey/ecdsa_sha2/ecdsa_signature_blob.rb +2 -4
- data/lib/hrr_rb_ssh/algorithm/publickey/ecdsa_sha2/public_key_blob.rb +2 -4
- data/lib/hrr_rb_ssh/algorithm/publickey/ecdsa_sha2/signature.rb +2 -4
- data/lib/hrr_rb_ssh/algorithm/publickey/ssh_dss.rb +10 -7
- data/lib/hrr_rb_ssh/algorithm/publickey/ssh_dss/public_key_blob.rb +2 -4
- data/lib/hrr_rb_ssh/algorithm/publickey/ssh_dss/signature.rb +2 -4
- data/lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa.rb +9 -6
- data/lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa/public_key_blob.rb +2 -4
- data/lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa/signature.rb +2 -4
- data/lib/hrr_rb_ssh/authentication.rb +103 -22
- data/lib/hrr_rb_ssh/authentication/constant.rb +14 -0
- data/lib/hrr_rb_ssh/authentication/method/keyboard_interactive.rb +44 -7
- data/lib/hrr_rb_ssh/authentication/method/keyboard_interactive/context.rb +16 -9
- data/lib/hrr_rb_ssh/authentication/method/keyboard_interactive/info_request.rb +7 -6
- data/lib/hrr_rb_ssh/authentication/method/keyboard_interactive/info_response.rb +5 -2
- data/lib/hrr_rb_ssh/authentication/method/none.rb +23 -7
- data/lib/hrr_rb_ssh/authentication/method/none/context.rb +15 -7
- data/lib/hrr_rb_ssh/authentication/method/password.rb +28 -7
- data/lib/hrr_rb_ssh/authentication/method/password/context.rb +16 -7
- data/lib/hrr_rb_ssh/authentication/method/publickey.rb +63 -10
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm.rb +0 -1
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/functionable.rb +32 -8
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/signature_blob.rb +2 -4
- data/lib/hrr_rb_ssh/authentication/method/publickey/context.rb +11 -2
- data/lib/hrr_rb_ssh/client.rb +234 -0
- data/lib/hrr_rb_ssh/codable.rb +15 -13
- data/lib/hrr_rb_ssh/compat/ruby.rb +0 -1
- data/lib/hrr_rb_ssh/connection.rb +145 -75
- data/lib/hrr_rb_ssh/connection/channel.rb +342 -109
- data/lib/hrr_rb_ssh/connection/channel/channel_type/direct_tcpip.rb +24 -19
- data/lib/hrr_rb_ssh/connection/channel/channel_type/forwarded_tcpip.rb +24 -19
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session.rb +19 -12
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/proc_chain.rb +0 -2
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/proc_chain/chain_context.rb +0 -3
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/env.rb +2 -5
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/env/context.rb +5 -4
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec.rb +2 -5
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec/context.rb +5 -4
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req.rb +2 -5
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req/context.rb +5 -4
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell.rb +2 -5
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell/context.rb +5 -4
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem.rb +2 -5
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem/context.rb +5 -4
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/window_change.rb +2 -5
- data/lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/window_change/context.rb +5 -4
- data/lib/hrr_rb_ssh/connection/global_request_handler.rb +14 -12
- data/lib/hrr_rb_ssh/connection/request_handler.rb +1 -3
- data/lib/hrr_rb_ssh/connection/request_handler/reference_env_request_handler.rb +0 -2
- data/lib/hrr_rb_ssh/connection/request_handler/reference_exec_request_handler.rb +4 -6
- data/lib/hrr_rb_ssh/connection/request_handler/reference_pty_req_request_handler.rb +10 -12
- data/lib/hrr_rb_ssh/connection/request_handler/reference_shell_request_handler.rb +4 -6
- data/lib/hrr_rb_ssh/connection/request_handler/reference_window_change_request_handler.rb +0 -2
- data/lib/hrr_rb_ssh/error/closed_authentication.rb +1 -1
- data/lib/hrr_rb_ssh/error/closed_connection.rb +1 -1
- data/lib/hrr_rb_ssh/error/closed_transport.rb +1 -1
- data/lib/hrr_rb_ssh/loggable.rb +42 -0
- data/lib/hrr_rb_ssh/message/001_ssh_msg_disconnect.rb +2 -4
- data/lib/hrr_rb_ssh/message/002_ssh_msg_ignore.rb +2 -4
- data/lib/hrr_rb_ssh/message/003_ssh_msg_unimplemented.rb +2 -4
- data/lib/hrr_rb_ssh/message/004_ssh_msg_debug.rb +2 -4
- data/lib/hrr_rb_ssh/message/005_ssh_msg_service_request.rb +2 -4
- data/lib/hrr_rb_ssh/message/006_ssh_msg_service_accept.rb +2 -4
- data/lib/hrr_rb_ssh/message/020_ssh_msg_kexinit.rb +2 -4
- data/lib/hrr_rb_ssh/message/021_ssh_msg_newkeys.rb +2 -4
- data/lib/hrr_rb_ssh/message/030_ssh_msg_kex_dh_gex_request_old.rb +2 -4
- data/lib/hrr_rb_ssh/message/030_ssh_msg_kexdh_init.rb +2 -4
- data/lib/hrr_rb_ssh/message/030_ssh_msg_kexecdh_init.rb +2 -4
- data/lib/hrr_rb_ssh/message/031_ssh_msg_kex_dh_gex_group.rb +2 -4
- data/lib/hrr_rb_ssh/message/031_ssh_msg_kexdh_reply.rb +2 -4
- data/lib/hrr_rb_ssh/message/031_ssh_msg_kexecdh_reply.rb +2 -4
- data/lib/hrr_rb_ssh/message/032_ssh_msg_kex_dh_gex_init.rb +2 -4
- data/lib/hrr_rb_ssh/message/033_ssh_msg_kex_dh_gex_reply.rb +2 -4
- data/lib/hrr_rb_ssh/message/034_ssh_msg_kex_dh_gex_request.rb +2 -4
- data/lib/hrr_rb_ssh/message/050_ssh_msg_userauth_request.rb +2 -4
- data/lib/hrr_rb_ssh/message/051_ssh_msg_userauth_failure.rb +2 -4
- data/lib/hrr_rb_ssh/message/052_ssh_msg_userauth_success.rb +2 -4
- data/lib/hrr_rb_ssh/message/060_ssh_msg_userauth_info_request.rb +2 -4
- data/lib/hrr_rb_ssh/message/060_ssh_msg_userauth_pk_ok.rb +2 -4
- data/lib/hrr_rb_ssh/message/061_ssh_msg_userauth_info_response.rb +2 -4
- data/lib/hrr_rb_ssh/message/080_ssh_msg_global_request.rb +2 -4
- data/lib/hrr_rb_ssh/message/081_ssh_msg_request_success.rb +2 -4
- data/lib/hrr_rb_ssh/message/082_ssh_msg_request_failure.rb +2 -4
- data/lib/hrr_rb_ssh/message/090_ssh_msg_channel_open.rb +2 -4
- data/lib/hrr_rb_ssh/message/091_ssh_msg_channel_open_confirmation.rb +2 -4
- data/lib/hrr_rb_ssh/message/092_ssh_msg_channel_open_failure.rb +2 -4
- data/lib/hrr_rb_ssh/message/093_ssh_msg_channel_window_adjust.rb +2 -4
- data/lib/hrr_rb_ssh/message/094_ssh_msg_channel_data.rb +2 -4
- data/lib/hrr_rb_ssh/message/095_ssh_msg_channel_extended_data.rb +2 -4
- data/lib/hrr_rb_ssh/message/096_ssh_msg_channel_eof.rb +2 -4
- data/lib/hrr_rb_ssh/message/097_ssh_msg_channel_close.rb +2 -4
- data/lib/hrr_rb_ssh/message/098_ssh_msg_channel_request.rb +3 -5
- data/lib/hrr_rb_ssh/message/099_ssh_msg_channel_success.rb +2 -4
- data/lib/hrr_rb_ssh/message/100_ssh_msg_channel_failure.rb +2 -4
- data/lib/hrr_rb_ssh/server.rb +16 -10
- data/lib/hrr_rb_ssh/transport.rb +113 -77
- data/lib/hrr_rb_ssh/transport/compression_algorithm/functionable.rb +5 -3
- data/lib/hrr_rb_ssh/transport/compression_algorithm/unfunctionable.rb +5 -3
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/functionable.rb +5 -3
- data/lib/hrr_rb_ssh/transport/encryption_algorithm/unfunctionable.rb +5 -3
- data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman.rb +43 -37
- data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman/h0.rb +2 -4
- data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman_group_exchange.rb +87 -52
- data/lib/hrr_rb_ssh/transport/kex_algorithm/diffie_hellman_group_exchange/h0.rb +2 -4
- data/lib/hrr_rb_ssh/transport/kex_algorithm/elliptic_curve_diffie_hellman.rb +43 -37
- data/lib/hrr_rb_ssh/transport/kex_algorithm/elliptic_curve_diffie_hellman/h0.rb +2 -4
- data/lib/hrr_rb_ssh/transport/mac_algorithm/functionable.rb +5 -3
- data/lib/hrr_rb_ssh/transport/mac_algorithm/unfunctionable.rb +5 -3
- data/lib/hrr_rb_ssh/transport/receiver.rb +8 -7
- data/lib/hrr_rb_ssh/transport/sender.rb +5 -3
- data/lib/hrr_rb_ssh/transport/sequence_number.rb +0 -4
- data/lib/hrr_rb_ssh/transport/server_host_key_algorithm.rb +0 -1
- data/lib/hrr_rb_ssh/transport/server_host_key_algorithm/functionable.rb +5 -3
- data/lib/hrr_rb_ssh/version.rb +1 -1
- metadata +18 -51
- data/lib/hrr_rb_ssh/algorithm/publickey/ssh_ed25519.rb +0 -61
- data/lib/hrr_rb_ssh/algorithm/publickey/ssh_ed25519/openssh_private_key.rb +0 -29
- data/lib/hrr_rb_ssh/algorithm/publickey/ssh_ed25519/openssh_private_key_content.rb +0 -26
- data/lib/hrr_rb_ssh/algorithm/publickey/ssh_ed25519/pkey.rb +0 -158
- data/lib/hrr_rb_ssh/algorithm/publickey/ssh_ed25519/public_key_blob.rb +0 -23
- data/lib/hrr_rb_ssh/algorithm/publickey/ssh_ed25519/signature.rb +0 -23
- data/lib/hrr_rb_ssh/authentication/method/publickey/algorithm/ssh_ed25519.rb +0 -21
- data/lib/hrr_rb_ssh/compat/ruby/array.rb +0 -14
- data/lib/hrr_rb_ssh/logger.rb +0 -56
- data/lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_ed25519.rb +0 -20
@@ -8,10 +8,8 @@ module HrrRbSsh
|
|
8
8
|
class Transport
|
9
9
|
class KexAlgorithm
|
10
10
|
module DiffieHellmanGroupExchange
|
11
|
-
|
12
|
-
|
13
|
-
include Codable
|
14
|
-
end
|
11
|
+
class H0
|
12
|
+
include Codable
|
15
13
|
DEFINITION = [
|
16
14
|
[DataType::String, :'V_C'],
|
17
15
|
[DataType::String, :'V_S'],
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# vim: et ts=2 sw=2
|
3
3
|
|
4
4
|
require 'openssl'
|
5
|
-
require 'hrr_rb_ssh/
|
5
|
+
require 'hrr_rb_ssh/loggable'
|
6
6
|
require 'hrr_rb_ssh/data_type'
|
7
7
|
require 'hrr_rb_ssh/transport/kex_algorithm/iv_computable'
|
8
8
|
|
@@ -10,80 +10,86 @@ module HrrRbSsh
|
|
10
10
|
class Transport
|
11
11
|
class KexAlgorithm
|
12
12
|
module EllipticCurveDiffieHellman
|
13
|
+
include Loggable
|
13
14
|
include IvComputable
|
14
15
|
|
15
|
-
def initialize
|
16
|
-
|
16
|
+
def initialize logger: nil
|
17
|
+
self.logger = logger
|
17
18
|
@dh = OpenSSL::PKey::EC.new(self.class::CURVE_NAME)
|
18
19
|
@dh.generate_key
|
20
|
+
@public_key = @dh.public_key.to_bn.to_i
|
19
21
|
end
|
20
22
|
|
21
|
-
def start transport
|
22
|
-
case mode
|
23
|
+
def start transport
|
24
|
+
case transport.mode
|
23
25
|
when Mode::SERVER
|
24
|
-
|
26
|
+
@k_s = transport.server_host_key_algorithm.server_public_host_key
|
27
|
+
@q_s = @public_key
|
28
|
+
message = receive_kexecdh_init transport.receive
|
29
|
+
@q_c = message[:'Q_C']
|
30
|
+
@shared_secret = OpenSSL::BN.new(@dh.dh_compute_key(OpenSSL::PKey::EC::Point.new(OpenSSL::PKey::EC.new(self.class::CURVE_NAME).group, OpenSSL::BN.new(@q_c))), 2).to_i
|
25
31
|
send_kexecdh_reply transport
|
26
|
-
|
27
|
-
|
32
|
+
when Mode::CLIENT
|
33
|
+
@q_c = @public_key
|
34
|
+
send_kexecdh_init transport
|
35
|
+
message = receive_kexecdh_reply transport.receive
|
36
|
+
@k_s = message[:'K_S']
|
37
|
+
@q_s = message[:'Q_S']
|
38
|
+
@shared_secret = OpenSSL::BN.new(@dh.dh_compute_key(OpenSSL::PKey::EC::Point.new(OpenSSL::PKey::EC.new(self.class::CURVE_NAME).group, OpenSSL::BN.new(@q_s))), 2).to_i
|
28
39
|
end
|
29
40
|
end
|
30
41
|
|
31
|
-
def set_q_c q_c
|
32
|
-
@q_c = q_c
|
33
|
-
end
|
34
|
-
|
35
42
|
def shared_secret
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
def public_key
|
40
|
-
f = @dh.public_key.to_bn.to_i
|
43
|
+
@shared_secret
|
41
44
|
end
|
42
45
|
|
43
46
|
def hash transport
|
44
|
-
q_c = @q_c
|
45
|
-
q_s = public_key
|
46
|
-
k = shared_secret
|
47
|
-
|
48
47
|
h0_payload = {
|
49
48
|
:'V_C' => transport.v_c,
|
50
49
|
:'V_S' => transport.v_s,
|
51
50
|
:'I_C' => transport.i_c,
|
52
51
|
:'I_S' => transport.i_s,
|
53
|
-
:'K_S' =>
|
54
|
-
:'Q_C' => q_c,
|
55
|
-
:'Q_S' => q_s,
|
56
|
-
:'K' =>
|
52
|
+
:'K_S' => @k_s,
|
53
|
+
:'Q_C' => @q_c,
|
54
|
+
:'Q_S' => @q_s,
|
55
|
+
:'K' => @shared_secret,
|
57
56
|
}
|
58
|
-
h0 = H0.encode h0_payload
|
59
|
-
|
60
|
-
h = OpenSSL::Digest.digest self.class::DIGEST, h0
|
61
|
-
|
62
|
-
h
|
57
|
+
h0 = H0.new(logger: logger).encode h0_payload
|
58
|
+
h = OpenSSL::Digest.digest self.class::DIGEST, h0
|
63
59
|
end
|
64
60
|
|
65
61
|
def sign transport
|
66
62
|
h = hash transport
|
67
63
|
s = transport.server_host_key_algorithm.sign h
|
68
|
-
|
69
|
-
s
|
70
64
|
end
|
71
65
|
|
72
66
|
def receive_kexecdh_init payload
|
73
|
-
|
74
|
-
set_q_c message[:'Q_C']
|
67
|
+
Message::SSH_MSG_KEXECDH_INIT.new(logger: logger).decode payload
|
75
68
|
end
|
76
69
|
|
77
70
|
def send_kexecdh_reply transport
|
78
71
|
message = {
|
79
72
|
:'message number' => Message::SSH_MSG_KEXECDH_REPLY::VALUE,
|
80
|
-
:'K_S' =>
|
81
|
-
:'Q_S' =>
|
73
|
+
:'K_S' => @k_s,
|
74
|
+
:'Q_S' => @q_s,
|
82
75
|
:'signature of H' => sign(transport),
|
83
76
|
}
|
84
|
-
payload = Message::SSH_MSG_KEXECDH_REPLY.encode message
|
77
|
+
payload = Message::SSH_MSG_KEXECDH_REPLY.new(logger: logger).encode message
|
85
78
|
transport.send payload
|
86
79
|
end
|
80
|
+
|
81
|
+
def send_kexecdh_init transport
|
82
|
+
message = {
|
83
|
+
:'message number' => Message::SSH_MSG_KEXECDH_INIT::VALUE,
|
84
|
+
:'Q_C' => @q_c,
|
85
|
+
}
|
86
|
+
payload = Message::SSH_MSG_KEXECDH_INIT.new(logger: logger).encode message
|
87
|
+
transport.send payload
|
88
|
+
end
|
89
|
+
|
90
|
+
def receive_kexecdh_reply payload
|
91
|
+
Message::SSH_MSG_KEXECDH_REPLY.new(logger: logger).decode payload
|
92
|
+
end
|
87
93
|
end
|
88
94
|
end
|
89
95
|
end
|
@@ -8,10 +8,8 @@ module HrrRbSsh
|
|
8
8
|
class Transport
|
9
9
|
class KexAlgorithm
|
10
10
|
module EllipticCurveDiffieHellman
|
11
|
-
|
12
|
-
|
13
|
-
include Codable
|
14
|
-
end
|
11
|
+
class H0
|
12
|
+
include Codable
|
15
13
|
DEFINITION = [
|
16
14
|
[DataType::String, :'V_C'],
|
17
15
|
[DataType::String, :'V_S'],
|
@@ -1,14 +1,16 @@
|
|
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/loggable'
|
5
5
|
|
6
6
|
module HrrRbSsh
|
7
7
|
class Transport
|
8
8
|
class MacAlgorithm
|
9
9
|
module Functionable
|
10
|
-
|
11
|
-
|
10
|
+
include Loggable
|
11
|
+
|
12
|
+
def initialize key, logger: nil
|
13
|
+
self.logger = logger
|
12
14
|
@key = key
|
13
15
|
end
|
14
16
|
|
@@ -1,14 +1,16 @@
|
|
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/loggable'
|
5
5
|
|
6
6
|
module HrrRbSsh
|
7
7
|
class Transport
|
8
8
|
class MacAlgorithm
|
9
9
|
module Unfunctionable
|
10
|
-
|
11
|
-
|
10
|
+
include Loggable
|
11
|
+
|
12
|
+
def initialize key=nil, logger: nil
|
13
|
+
self.logger = logger
|
12
14
|
end
|
13
15
|
|
14
16
|
def digest_length
|
@@ -1,14 +1,15 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
# vim: et ts=2 sw=2
|
3
3
|
|
4
|
-
require 'hrr_rb_ssh/
|
5
|
-
#require 'hrr_rb_ssh/transport/packet'
|
4
|
+
require 'hrr_rb_ssh/loggable'
|
6
5
|
|
7
6
|
module HrrRbSsh
|
8
7
|
class Transport
|
9
8
|
class Receiver
|
10
|
-
|
11
|
-
|
9
|
+
include Loggable
|
10
|
+
|
11
|
+
def initialize logger: nil
|
12
|
+
self.logger = logger
|
12
13
|
end
|
13
14
|
|
14
15
|
def depacketize transport, packet
|
@@ -34,7 +35,7 @@ module HrrRbSsh
|
|
34
35
|
block_size = [transport.incoming_encryption_algorithm.block_size, minimum_block_size].max
|
35
36
|
encrypted_packet.push transport.io.read(block_size)
|
36
37
|
if (encrypted_packet.last == nil) || (encrypted_packet.last.length != block_size)
|
37
|
-
|
38
|
+
log_info { "IO is EOF" }
|
38
39
|
raise EOFError
|
39
40
|
end
|
40
41
|
unencrypted_packet.push transport.incoming_encryption_algorithm.decrypt(encrypted_packet.last)
|
@@ -43,7 +44,7 @@ module HrrRbSsh
|
|
43
44
|
following_packet_length = packet_length_field_length + packet_length - block_size
|
44
45
|
encrypted_packet.push transport.io.read(following_packet_length)
|
45
46
|
if (encrypted_packet.last == nil) || (encrypted_packet.last.length != following_packet_length)
|
46
|
-
|
47
|
+
log_info { "IO is EOF" }
|
47
48
|
raise EOFError
|
48
49
|
end
|
49
50
|
unencrypted_packet.push transport.incoming_encryption_algorithm.decrypt(encrypted_packet.last)
|
@@ -55,7 +56,7 @@ module HrrRbSsh
|
|
55
56
|
mac_length = transport.incoming_mac_algorithm.digest_length
|
56
57
|
mac = transport.io.read mac_length
|
57
58
|
if (mac == nil) || (mac.length != mac_length)
|
58
|
-
|
59
|
+
log_info { "IO is EOF" }
|
59
60
|
raise EOFError
|
60
61
|
end
|
61
62
|
mac
|
@@ -1,13 +1,15 @@
|
|
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/loggable'
|
5
5
|
|
6
6
|
module HrrRbSsh
|
7
7
|
class Transport
|
8
8
|
class Sender
|
9
|
-
|
10
|
-
|
9
|
+
include Loggable
|
10
|
+
|
11
|
+
def initialize logger: nil
|
12
|
+
self.logger = logger
|
11
13
|
end
|
12
14
|
|
13
15
|
def packetize transport, payload
|
@@ -1,8 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
# vim: et ts=2 sw=2
|
3
3
|
|
4
|
-
require 'hrr_rb_ssh/logger'
|
5
|
-
|
6
4
|
module HrrRbSsh
|
7
5
|
class Transport
|
8
6
|
class SequenceNumber
|
@@ -10,8 +8,6 @@ module HrrRbSsh
|
|
10
8
|
|
11
9
|
def initialize
|
12
10
|
@sequence_number = 0
|
13
|
-
|
14
|
-
@logger = Logger.new self.class.name
|
15
11
|
end
|
16
12
|
|
17
13
|
def increment
|
@@ -19,4 +19,3 @@ require 'hrr_rb_ssh/transport/server_host_key_algorithm/ssh_rsa'
|
|
19
19
|
require 'hrr_rb_ssh/transport/server_host_key_algorithm/ecdsa_sha2_nistp256'
|
20
20
|
require 'hrr_rb_ssh/transport/server_host_key_algorithm/ecdsa_sha2_nistp384'
|
21
21
|
require 'hrr_rb_ssh/transport/server_host_key_algorithm/ecdsa_sha2_nistp521'
|
22
|
-
require 'hrr_rb_ssh/transport/server_host_key_algorithm/ssh_ed25519'
|
@@ -1,14 +1,16 @@
|
|
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/loggable'
|
5
5
|
|
6
6
|
module HrrRbSsh
|
7
7
|
class Transport
|
8
8
|
class ServerHostKeyAlgorithm
|
9
9
|
module Functionable
|
10
|
-
|
11
|
-
|
10
|
+
include Loggable
|
11
|
+
|
12
|
+
def initialize secret_key=nil, logger: nil
|
13
|
+
self.logger = logger
|
12
14
|
@publickey = Algorithm::Publickey[self.class::NAME].new (secret_key || self.class::SECRET_KEY)
|
13
15
|
end
|
14
16
|
|
data/lib/hrr_rb_ssh/version.rb
CHANGED
metadata
CHANGED
@@ -1,57 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hrr_rb_ssh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hirura
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: ed25519
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.2'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.2'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: bundler
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.16'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '1.16'
|
41
13
|
- !ruby/object:Gem::Dependency
|
42
14
|
name: rake
|
43
15
|
requirement: !ruby/object:Gem::Requirement
|
44
16
|
requirements:
|
45
17
|
- - "~>"
|
46
18
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
19
|
+
version: '12.0'
|
48
20
|
type: :development
|
49
21
|
prerelease: false
|
50
22
|
version_requirements: !ruby/object:Gem::Requirement
|
51
23
|
requirements:
|
52
24
|
- - "~>"
|
53
25
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
26
|
+
version: '12.0'
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
28
|
name: rspec
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,20 +39,20 @@ dependencies:
|
|
67
39
|
- !ruby/object:Gem::Version
|
68
40
|
version: '3.0'
|
69
41
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
42
|
+
name: simplecov
|
71
43
|
requirement: !ruby/object:Gem::Requirement
|
72
44
|
requirements:
|
73
45
|
- - "~>"
|
74
46
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
47
|
+
version: '0.16'
|
76
48
|
type: :development
|
77
49
|
prerelease: false
|
78
50
|
version_requirements: !ruby/object:Gem::Requirement
|
79
51
|
requirements:
|
80
52
|
- - "~>"
|
81
53
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
83
|
-
description: Pure Ruby SSH 2.0 server implementation
|
54
|
+
version: '0.16'
|
55
|
+
description: Pure Ruby SSH 2.0 server and client implementation
|
84
56
|
email:
|
85
57
|
- hirura@gmail.com
|
86
58
|
executables: []
|
@@ -95,7 +67,10 @@ files:
|
|
95
67
|
- LICENSE
|
96
68
|
- README.md
|
97
69
|
- Rakefile
|
70
|
+
- demo/client.rb
|
98
71
|
- demo/echo_server.rb
|
72
|
+
- demo/more_flexible_auth.rb
|
73
|
+
- demo/multi_step_auth.rb
|
99
74
|
- demo/server.rb
|
100
75
|
- demo/subsystem_echo_server.rb
|
101
76
|
- hrr_rb_ssh.gemspec
|
@@ -112,17 +87,12 @@ files:
|
|
112
87
|
- lib/hrr_rb_ssh/algorithm/publickey/ssh_dss.rb
|
113
88
|
- lib/hrr_rb_ssh/algorithm/publickey/ssh_dss/public_key_blob.rb
|
114
89
|
- lib/hrr_rb_ssh/algorithm/publickey/ssh_dss/signature.rb
|
115
|
-
- lib/hrr_rb_ssh/algorithm/publickey/ssh_ed25519.rb
|
116
|
-
- lib/hrr_rb_ssh/algorithm/publickey/ssh_ed25519/openssh_private_key.rb
|
117
|
-
- lib/hrr_rb_ssh/algorithm/publickey/ssh_ed25519/openssh_private_key_content.rb
|
118
|
-
- lib/hrr_rb_ssh/algorithm/publickey/ssh_ed25519/pkey.rb
|
119
|
-
- lib/hrr_rb_ssh/algorithm/publickey/ssh_ed25519/public_key_blob.rb
|
120
|
-
- lib/hrr_rb_ssh/algorithm/publickey/ssh_ed25519/signature.rb
|
121
90
|
- lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa.rb
|
122
91
|
- lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa/public_key_blob.rb
|
123
92
|
- lib/hrr_rb_ssh/algorithm/publickey/ssh_rsa/signature.rb
|
124
93
|
- lib/hrr_rb_ssh/authentication.rb
|
125
94
|
- lib/hrr_rb_ssh/authentication/authenticator.rb
|
95
|
+
- lib/hrr_rb_ssh/authentication/constant.rb
|
126
96
|
- lib/hrr_rb_ssh/authentication/method.rb
|
127
97
|
- lib/hrr_rb_ssh/authentication/method/keyboard_interactive.rb
|
128
98
|
- lib/hrr_rb_ssh/authentication/method/keyboard_interactive/context.rb
|
@@ -140,16 +110,15 @@ files:
|
|
140
110
|
- lib/hrr_rb_ssh/authentication/method/publickey/algorithm/functionable.rb
|
141
111
|
- lib/hrr_rb_ssh/authentication/method/publickey/algorithm/signature_blob.rb
|
142
112
|
- lib/hrr_rb_ssh/authentication/method/publickey/algorithm/ssh_dss.rb
|
143
|
-
- lib/hrr_rb_ssh/authentication/method/publickey/algorithm/ssh_ed25519.rb
|
144
113
|
- lib/hrr_rb_ssh/authentication/method/publickey/algorithm/ssh_rsa.rb
|
145
114
|
- lib/hrr_rb_ssh/authentication/method/publickey/context.rb
|
115
|
+
- lib/hrr_rb_ssh/client.rb
|
146
116
|
- lib/hrr_rb_ssh/codable.rb
|
147
117
|
- lib/hrr_rb_ssh/compat.rb
|
148
118
|
- lib/hrr_rb_ssh/compat/openssh.rb
|
149
119
|
- lib/hrr_rb_ssh/compat/openssh/authorized_keys.rb
|
150
120
|
- lib/hrr_rb_ssh/compat/openssh/public_key.rb
|
151
121
|
- lib/hrr_rb_ssh/compat/ruby.rb
|
152
|
-
- lib/hrr_rb_ssh/compat/ruby/array.rb
|
153
122
|
- lib/hrr_rb_ssh/compat/ruby/openssl.rb
|
154
123
|
- lib/hrr_rb_ssh/compat/ruby/openssl/bn.rb
|
155
124
|
- lib/hrr_rb_ssh/compat/ruby/queue.rb
|
@@ -193,7 +162,7 @@ files:
|
|
193
162
|
- lib/hrr_rb_ssh/error/closed_authentication.rb
|
194
163
|
- lib/hrr_rb_ssh/error/closed_connection.rb
|
195
164
|
- lib/hrr_rb_ssh/error/closed_transport.rb
|
196
|
-
- lib/hrr_rb_ssh/
|
165
|
+
- lib/hrr_rb_ssh/loggable.rb
|
197
166
|
- lib/hrr_rb_ssh/message.rb
|
198
167
|
- lib/hrr_rb_ssh/message/001_ssh_msg_disconnect.rb
|
199
168
|
- lib/hrr_rb_ssh/message/002_ssh_msg_ignore.rb
|
@@ -298,7 +267,6 @@ files:
|
|
298
267
|
- lib/hrr_rb_ssh/transport/server_host_key_algorithm/ecdsa_sha2_nistp521.rb
|
299
268
|
- lib/hrr_rb_ssh/transport/server_host_key_algorithm/functionable.rb
|
300
269
|
- lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_dss.rb
|
301
|
-
- lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_ed25519.rb
|
302
270
|
- lib/hrr_rb_ssh/transport/server_host_key_algorithm/ssh_rsa.rb
|
303
271
|
- lib/hrr_rb_ssh/version.rb
|
304
272
|
homepage: https://github.com/hirura/hrr_rb_ssh
|
@@ -316,13 +284,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
316
284
|
version: 2.0.0
|
317
285
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
318
286
|
requirements:
|
319
|
-
- - "
|
287
|
+
- - ">="
|
320
288
|
- !ruby/object:Gem::Version
|
321
|
-
version:
|
289
|
+
version: '0'
|
322
290
|
requirements: []
|
323
|
-
|
324
|
-
rubygems_version: 2.7.6
|
291
|
+
rubygems_version: 3.1.2
|
325
292
|
signing_key:
|
326
293
|
specification_version: 4
|
327
|
-
summary: Pure Ruby SSH 2.0 server implementation
|
294
|
+
summary: Pure Ruby SSH 2.0 server and client implementation
|
328
295
|
test_files: []
|