hrr_rb_ssh 0.3.0.pre3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -24,6 +24,7 @@ module HrrRbSsh
24
24
 
25
25
  attr_reader \
26
26
  :io,
27
+ :mode,
27
28
  :supported_encryption_algorithms,
28
29
  :supported_server_host_key_algorithms,
29
30
  :supported_kex_algorithms,
@@ -167,6 +168,8 @@ module HrrRbSsh
167
168
  case @mode
168
169
  when Mode::SERVER
169
170
  verify_service_request
171
+ when Mode::CLIENT
172
+ send_service_request
170
173
  end
171
174
 
172
175
  @closed = false
@@ -235,7 +238,7 @@ module HrrRbSsh
235
238
  end
236
239
 
237
240
  def start_kex_algorithm
238
- @kex_algorithm.start self, @mode
241
+ @kex_algorithm.start self
239
242
  end
240
243
 
241
244
  def verify_service_request
@@ -398,6 +401,18 @@ module HrrRbSsh
398
401
  message = Message::SSH_MSG_NEWKEYS.decode payload
399
402
  end
400
403
 
404
+ def send_service_request
405
+ message = {
406
+ :'message number' => Message::SSH_MSG_SERVICE_REQUEST::VALUE,
407
+ :'service name' => 'ssh-userauth',
408
+ }
409
+ payload = Message::SSH_MSG_SERVICE_REQUEST.encode message
410
+ send payload
411
+
412
+ payload = @receiver.receive self
413
+ message = Message::SSH_MSG_SERVICE_ACCEPT.decode payload
414
+ end
415
+
401
416
  def receive_service_request
402
417
  payload = @receiver.receive self
403
418
  message = Message::SSH_MSG_SERVICE_REQUEST.decode payload
@@ -406,12 +421,12 @@ module HrrRbSsh
406
421
  end
407
422
 
408
423
  def send_service_accept service_name
409
- message = {
410
- :'message number' => Message::SSH_MSG_SERVICE_ACCEPT::VALUE,
411
- :'service name' => service_name,
412
- }
413
- payload = Message::SSH_MSG_SERVICE_ACCEPT.encode message
414
- send payload
424
+ message = {
425
+ :'message number' => Message::SSH_MSG_SERVICE_ACCEPT::VALUE,
426
+ :'service name' => service_name,
427
+ }
428
+ payload = Message::SSH_MSG_SERVICE_ACCEPT.encode message
429
+ send payload
415
430
  end
416
431
 
417
432
  def update_remote_algorithms message
@@ -430,14 +445,14 @@ module HrrRbSsh
430
445
  when Mode::SERVER
431
446
  kex_algorithm_name = @remote_kex_algorithms.find{ |a| @local_kex_algorithms.include? a } or raise
432
447
  server_host_key_algorithm_name = @remote_server_host_key_algorithms.find{ |a| @local_server_host_key_algorithms.include? a } or raise
448
+ server_secret_host_key = @options.fetch('transport_server_secret_host_keys', {}).fetch(server_host_key_algorithm_name, nil)
433
449
  when Mode::CLIENT
434
450
  kex_algorithm_name = @local_kex_algorithms.find{ |a| @remote_kex_algorithms.include? a } or raise
435
451
  server_host_key_algorithm_name = @local_server_host_key_algorithms.find{ |a| @remote_server_host_key_algorithms.include? a } or raise
452
+ server_secret_host_key = nil
436
453
  end
437
-
438
- server_secret_host_key = @options.fetch('transport_server_secret_host_keys', {}).fetch(server_host_key_algorithm_name, nil)
439
- @kex_algorithm = KexAlgorithm[kex_algorithm_name].new
440
454
  @server_host_key_algorithm = ServerHostKeyAlgorithm[server_host_key_algorithm_name].new server_secret_host_key
455
+ @kex_algorithm = KexAlgorithm[kex_algorithm_name].new
441
456
  end
442
457
 
443
458
  def update_encryption_mac_compression_algorithms
@@ -458,6 +473,15 @@ module HrrRbSsh
458
473
  outgoing_crpt_iv = @kex_algorithm.iv_s_to_c self, outgoing_encryption_algorithm_name
459
474
  incoming_crpt_key = @kex_algorithm.key_c_to_s self, incoming_encryption_algorithm_name
460
475
  outgoing_crpt_key = @kex_algorithm.key_s_to_c self, outgoing_encryption_algorithm_name
476
+ when Mode::CLIENT
477
+ encryption_algorithm_s_to_c_name = @local_encryption_algorithms_server_to_client.find{ |a| @remote_encryption_algorithms_server_to_client.include? a } or raise
478
+ encryption_algorithm_c_to_s_name = @local_encryption_algorithms_client_to_server.find{ |a| @remote_encryption_algorithms_client_to_server.include? a } or raise
479
+ incoming_encryption_algorithm_name = encryption_algorithm_s_to_c_name
480
+ outgoing_encryption_algorithm_name = encryption_algorithm_c_to_s_name
481
+ incoming_crpt_iv = @kex_algorithm.iv_s_to_c self, incoming_encryption_algorithm_name
482
+ outgoing_crpt_iv = @kex_algorithm.iv_c_to_s self, outgoing_encryption_algorithm_name
483
+ incoming_crpt_key = @kex_algorithm.key_s_to_c self, incoming_encryption_algorithm_name
484
+ outgoing_crpt_key = @kex_algorithm.key_c_to_s self, outgoing_encryption_algorithm_name
461
485
  end
462
486
  @incoming_encryption_algorithm = EncryptionAlgorithm[incoming_encryption_algorithm_name].new Direction::INCOMING, incoming_crpt_iv, incoming_crpt_key
463
487
  @outgoing_encryption_algorithm = EncryptionAlgorithm[outgoing_encryption_algorithm_name].new Direction::OUTGOING, outgoing_crpt_iv, outgoing_crpt_key
@@ -472,6 +496,13 @@ module HrrRbSsh
472
496
  outgoing_mac_algorithm_name = mac_algorithm_s_to_c_name
473
497
  incoming_mac_key = @kex_algorithm.mac_c_to_s self, incoming_mac_algorithm_name
474
498
  outgoing_mac_key = @kex_algorithm.mac_s_to_c self, outgoing_mac_algorithm_name
499
+ when Mode::CLIENT
500
+ mac_algorithm_s_to_c_name = @local_mac_algorithms_server_to_client.find{ |a| @remote_mac_algorithms_server_to_client.include? a } or raise
501
+ mac_algorithm_c_to_s_name = @local_mac_algorithms_client_to_server.find{ |a| @remote_mac_algorithms_client_to_server.include? a } or raise
502
+ incoming_mac_algorithm_name = mac_algorithm_s_to_c_name
503
+ outgoing_mac_algorithm_name = mac_algorithm_c_to_s_name
504
+ incoming_mac_key = @kex_algorithm.mac_s_to_c self, incoming_mac_algorithm_name
505
+ outgoing_mac_key = @kex_algorithm.mac_c_to_s self, outgoing_mac_algorithm_name
475
506
  end
476
507
  @incoming_mac_algorithm = MacAlgorithm[incoming_mac_algorithm_name].new incoming_mac_key
477
508
  @outgoing_mac_algorithm = MacAlgorithm[outgoing_mac_algorithm_name].new outgoing_mac_key
@@ -484,6 +515,11 @@ module HrrRbSsh
484
515
  compression_algorithm_s_to_c_name = @remote_compression_algorithms_server_to_client.find{ |a| @local_compression_algorithms_server_to_client.include? a } or raise
485
516
  incoming_compression_algorithm_name = compression_algorithm_c_to_s_name
486
517
  outgoing_compression_algorithm_name = compression_algorithm_s_to_c_name
518
+ when Mode::CLIENT
519
+ compression_algorithm_s_to_c_name = @local_compression_algorithms_server_to_client.find{ |a| @remote_compression_algorithms_server_to_client.include? a } or raise
520
+ compression_algorithm_c_to_s_name = @local_compression_algorithms_client_to_server.find{ |a| @remote_compression_algorithms_client_to_server.include? a } or raise
521
+ incoming_compression_algorithm_name = compression_algorithm_s_to_c_name
522
+ outgoing_compression_algorithm_name = compression_algorithm_c_to_s_name
487
523
  end
488
524
  @incoming_compression_algorithm.close
489
525
  @outgoing_compression_algorithm.close
@@ -2,5 +2,5 @@
2
2
  # vim: et ts=2 sw=2
3
3
 
4
4
  module HrrRbSsh
5
- VERSION = "0.3.0.pre3"
5
+ VERSION = "0.3.0"
6
6
  end
data/lib/hrr_rb_ssh.rb CHANGED
@@ -17,3 +17,4 @@ require "hrr_rb_ssh/transport"
17
17
  require "hrr_rb_ssh/authentication"
18
18
  require "hrr_rb_ssh/connection"
19
19
  require "hrr_rb_ssh/server"
20
+ require "hrr_rb_ssh/client"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hrr_rb_ssh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0.pre3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hirura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-03 00:00:00.000000000 Z
11
+ date: 2019-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ed25519
@@ -66,7 +66,7 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.16'
69
- description: Pure Ruby SSH 2.0 server implementation
69
+ description: Pure Ruby SSH 2.0 server and client implementation
70
70
  email:
71
71
  - hirura@gmail.com
72
72
  executables: []
@@ -81,6 +81,7 @@ files:
81
81
  - LICENSE
82
82
  - README.md
83
83
  - Rakefile
84
+ - demo/client.rb
84
85
  - demo/echo_server.rb
85
86
  - demo/more_flexible_auth.rb
86
87
  - demo/multi_step_auth.rb
@@ -132,6 +133,7 @@ files:
132
133
  - lib/hrr_rb_ssh/authentication/method/publickey/algorithm/ssh_ed25519.rb
133
134
  - lib/hrr_rb_ssh/authentication/method/publickey/algorithm/ssh_rsa.rb
134
135
  - lib/hrr_rb_ssh/authentication/method/publickey/context.rb
136
+ - lib/hrr_rb_ssh/client.rb
135
137
  - lib/hrr_rb_ssh/codable.rb
136
138
  - lib/hrr_rb_ssh/compat.rb
137
139
  - lib/hrr_rb_ssh/compat/openssh.rb
@@ -304,13 +306,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
304
306
  version: 2.0.0
305
307
  required_rubygems_version: !ruby/object:Gem::Requirement
306
308
  requirements:
307
- - - ">"
309
+ - - ">="
308
310
  - !ruby/object:Gem::Version
309
- version: 1.3.1
311
+ version: '0'
310
312
  requirements: []
311
- rubyforge_project:
312
- rubygems_version: 2.7.6
313
+ rubygems_version: 3.0.3
313
314
  signing_key:
314
315
  specification_version: 4
315
- summary: Pure Ruby SSH 2.0 server implementation
316
+ summary: Pure Ruby SSH 2.0 server and client implementation
316
317
  test_files: []