hrr_rb_ssh 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec455249771885393139c2cbe162fa253e5416d2c9bf27478d20073027bf2f18
4
- data.tar.gz: 6f73965ad0835b838ea26dfa496961d2c52052068957b963e8a02ef735e4f0c7
3
+ metadata.gz: 781a7427bc3d26dcddba2be4a74f685d26ecc867fe6a1d937cd19e3b56cd9477
4
+ data.tar.gz: c1ea1ee12f012d1cf66a23518049a9ce127a1ded1536c735330b6f7e3ad22d7d
5
5
  SHA512:
6
- metadata.gz: a94383816e8e2fb807a0db84190c07d2c11614169d2ccb4755673b838d273a1b2168beef44ebd7c8028401af618b08075ae4f811d1b02213457a69d0ffe75b5b
7
- data.tar.gz: 659d58c1b86649825764f7db02eeb243ac6c07b458f4407b78f9fb0108b3d1aa58ab1edc0fe6c77ea6989bafcad48c2d56456c8f74c1107e5a4c1ffff3adb307
6
+ metadata.gz: c0c79b9c3d00f49b4e8090ec6cf9aa5e58619d62f4bd46a0d2864c3c29d908a92470f4eda4e9ba1b057f765b98214ddcaa5b44e9cd4de1ecd44639afd89d29bd
7
+ data.tar.gz: e9c84a3ad17d39972c6950f4da1b92bca351511d5bc220b342ac7d61f7d70631f60c68ecd5ac5d964d76825b5a67027227bb45ac3f2703788c7d7a548359c730
data/.gitignore CHANGED
@@ -21,7 +21,4 @@ Gemfile.lock
21
21
  .ruby-gemset
22
22
 
23
23
  # additional
24
- .DS_Store
25
- *~
26
- *.swp
27
24
  /yang/
data/README.md CHANGED
@@ -584,7 +584,7 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/hirura
584
584
 
585
585
  ## Code of Conduct
586
586
 
587
- Everyone interacting in the HrrRbSsh projects codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/hirura/hrr_rb_ssh/blob/master/CODE_OF_CONDUCT.md).
587
+ Everyone interacting in the HrrRbSsh project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/hirura/hrr_rb_ssh/blob/master/CODE_OF_CONDUCT.md).
588
588
 
589
589
  ## License
590
590
 
@@ -112,7 +112,7 @@ module HrrRbSsh
112
112
  when PARTIAL_SUCCESS
113
113
  log_info { "partially verified" }
114
114
  authentication_methods.delete method_name
115
- log_debug { "authentication methods that can continue: #{authentication_methods}" }
115
+ log_info { "authentication methods that can continue: #{authentication_methods}" }
116
116
  if authentication_methods.empty?
117
117
  log_info { "verified" }
118
118
  send_userauth_success
@@ -159,7 +159,7 @@ module HrrRbSsh
159
159
  log_info { "partially verified" }
160
160
  end
161
161
  authentication_methods_that_can_continue = message[:'authentications that can continue']
162
- log_debug { "authentication methods that can continue: #{authentication_methods_that_can_continue}" }
162
+ log_info { "authentication methods that can continue: #{authentication_methods_that_can_continue}" }
163
163
  next_method_name = authentication_methods.find{ |local_m| authentication_methods_that_can_continue.find{ |remote_m| local_m == remote_m } }
164
164
  if next_method_name
165
165
  authentication_methods.delete next_method_name
@@ -23,7 +23,6 @@ module HrrRbSsh
23
23
 
24
24
  def authenticate userauth_request_message
25
25
  log_info { "authenticate" }
26
- log_debug { "userauth request: " + userauth_request_message.inspect }
27
26
  username = userauth_request_message[:'user name']
28
27
  submethods = userauth_request_message[:'submethods']
29
28
  context = Context.new(@transport, username, submethods, @variables, @authentication_methods, logger: logger)
@@ -22,7 +22,6 @@ module HrrRbSsh
22
22
 
23
23
  def authenticate userauth_request_message
24
24
  log_info { "authenticate" }
25
- log_debug { "userauth request: " + userauth_request_message.inspect }
26
25
  context = Context.new(userauth_request_message[:'user name'], @variables, @authentication_methods, logger: logger)
27
26
  @authenticator.authenticate context
28
27
  end
@@ -23,7 +23,6 @@ module HrrRbSsh
23
23
 
24
24
  def authenticate userauth_request_message
25
25
  log_info { "authenticate" }
26
- log_debug { "userauth request: " + userauth_request_message.inspect }
27
26
  username = userauth_request_message[:'user name']
28
27
  password = userauth_request_message[:'plaintext password']
29
28
  context = Context.new(username, password, @variables, @authentication_methods, logger: logger)
@@ -75,14 +75,14 @@ module HrrRbSsh
75
75
  end
76
76
 
77
77
  def close
78
- log_debug { "closing client" }
78
+ log_info { "closing client" }
79
79
  @closed = true
80
80
  @connection.close
81
- log_debug { "client closed" }
81
+ log_info { "client closed" }
82
82
  end
83
83
 
84
84
  def exec! command, pty: false, env: {}
85
- log_debug { "start exec!: #{command}" }
85
+ log_info { "start exec!: #{command}" }
86
86
  out_buf = StringIO.new
87
87
  err_buf = StringIO.new
88
88
  begin
@@ -141,7 +141,7 @@ module HrrRbSsh
141
141
  end
142
142
 
143
143
  def exec command, pty: false, env: {}
144
- log_debug { "start exec: #{command}" }
144
+ log_info { "start exec: #{command}" }
145
145
  begin
146
146
  log_info { "Opning channel" }
147
147
  channel = @connection.request_channel_open "session"
@@ -174,7 +174,7 @@ module HrrRbSsh
174
174
  end
175
175
 
176
176
  def shell env: {}
177
- log_debug { "start shell" }
177
+ log_info { "start shell" }
178
178
  begin
179
179
  log_info { "Opning channel" }
180
180
  channel = @connection.request_channel_open "session"
@@ -205,7 +205,7 @@ module HrrRbSsh
205
205
  end
206
206
 
207
207
  def subsystem name
208
- log_debug { "start subsystem" }
208
+ log_info { "start subsystem" }
209
209
  begin
210
210
  log_info { "Opning channel" }
211
211
  channel = @connection.request_channel_open "session"
@@ -224,35 +224,35 @@ module HrrRbSsh
224
224
  log_info { 'received ' + Message::SSH_MSG_CHANNEL_REQUEST::ID }
225
225
  message = Message::SSH_MSG_CHANNEL_REQUEST.new(logger: logger).decode payload
226
226
  local_channel = message[:'recipient channel']
227
- @channels[local_channel].receive_message_queue.enq message
227
+ @channels[local_channel].receive_message_queue.enq message if @channels.has_key? local_channel
228
228
  end
229
229
 
230
230
  def channel_window_adjust payload
231
231
  log_info { 'received ' + Message::SSH_MSG_CHANNEL_WINDOW_ADJUST::ID }
232
232
  message = Message::SSH_MSG_CHANNEL_WINDOW_ADJUST.new(logger: logger).decode payload
233
233
  local_channel = message[:'recipient channel']
234
- @channels[local_channel].receive_message_queue.enq message
234
+ @channels[local_channel].receive_message_queue.enq message if @channels.has_key? local_channel
235
235
  end
236
236
 
237
237
  def channel_data payload
238
238
  log_info { 'received ' + Message::SSH_MSG_CHANNEL_DATA::ID }
239
239
  message = Message::SSH_MSG_CHANNEL_DATA.new(logger: logger).decode payload
240
240
  local_channel = message[:'recipient channel']
241
- @channels[local_channel].receive_message_queue.enq message
241
+ @channels[local_channel].receive_message_queue.enq message if @channels.has_key? local_channel
242
242
  end
243
243
 
244
244
  def channel_extended_data payload
245
245
  log_info { 'received ' + Message::SSH_MSG_CHANNEL_EXTENDED_DATA::ID }
246
246
  message = Message::SSH_MSG_CHANNEL_EXTENDED_DATA.new(logger: logger).decode payload
247
247
  local_channel = message[:'recipient channel']
248
- @channels[local_channel].receive_message_queue.enq message
248
+ @channels[local_channel].receive_message_queue.enq message if @channels.has_key? local_channel
249
249
  end
250
250
 
251
251
  def channel_eof payload
252
252
  log_info { 'received ' + Message::SSH_MSG_CHANNEL_EOF::ID }
253
253
  message = Message::SSH_MSG_CHANNEL_EOF.new(logger: logger).decode payload
254
254
  local_channel = message[:'recipient channel']
255
- @channels[local_channel].receive_message_queue.enq message
255
+ @channels[local_channel].receive_message_queue.enq message if @channels.has_key? local_channel
256
256
  end
257
257
 
258
258
  def channel_close payload
@@ -85,13 +85,13 @@ module HrrRbSsh
85
85
  @channel_type_instance.start
86
86
  end
87
87
  @closed = false
88
- log_debug { "in start: #{@waiting_thread}" }
88
+ log_debug { "in start: #{@waiting_thread.inspect}" }
89
89
  @waiting_thread.wakeup if @waiting_thread
90
90
  end
91
91
 
92
92
  def wait_until_started
93
93
  @waiting_thread = Thread.current
94
- log_debug { "in wait_until_started: #{@waiting_thread}" }
94
+ log_debug { "in wait_until_started: #{@waiting_thread.inspect}" }
95
95
  Thread.stop
96
96
  end
97
97
 
@@ -203,7 +203,7 @@ module HrrRbSsh
203
203
  local_channel = message[:'recipient channel']
204
204
  @receive_extended_data_queue.enq message[:'data']
205
205
  when Message::SSH_MSG_CHANNEL_WINDOW_ADJUST::VALUE
206
- log_debug { "received channel window adjust" }
206
+ log_info { "received channel window adjust" }
207
207
  @remote_window_size = [@remote_window_size + message[:'bytes to add'], 0xffff_ffff].min
208
208
  else
209
209
  log_warn { "received unsupported message: #{message.inspect}" }
@@ -59,7 +59,6 @@ module HrrRbSsh
59
59
  @options = options
60
60
 
61
61
  @closed = nil
62
- @disconnected = nil
63
62
 
64
63
  @in_kex = false
65
64
 
@@ -88,11 +87,12 @@ module HrrRbSsh
88
87
  end
89
88
 
90
89
  def send payload
90
+ raise Error::ClosedTransport if @closed
91
91
  @sender_monitor.synchronize do
92
92
  begin
93
93
  @sender.send self, payload
94
- rescue Errno::EPIPE => e
95
- log_warn { "IO is Broken PIPE" }
94
+ rescue IOError, SystemCallError => e
95
+ log_info { "#{e.message} (#{e.class})" }
96
96
  close
97
97
  raise Error::ClosedTransport
98
98
  rescue => e
@@ -110,25 +110,24 @@ module HrrRbSsh
110
110
  payload = @receiver.receive self
111
111
  case payload[0,1].unpack("C")[0]
112
112
  when Message::SSH_MSG_DISCONNECT::VALUE
113
+ log_info { "received disconnect message" }
113
114
  message = Message::SSH_MSG_DISCONNECT.new(logger: logger).decode payload
114
- log_debug { "received disconnect message: #{message.inspect}" }
115
- @disconnected = true
116
115
  close
117
116
  raise Error::ClosedTransport
118
117
  when Message::SSH_MSG_IGNORE::VALUE
118
+ log_info { "received ignore message" }
119
119
  message = Message::SSH_MSG_IGNORE.new(logger: logger).decode payload
120
- log_debug { "received ignore message: #{message.inspect}" }
121
120
  receive
122
121
  when Message::SSH_MSG_UNIMPLEMENTED::VALUE
122
+ log_info { "received unimplemented message" }
123
123
  message = Message::SSH_MSG_UNIMPLEMENTED.new(logger: logger).decode payload
124
- log_debug { "received unimplemented message: #{message.inspect}" }
125
124
  receive
126
125
  when Message::SSH_MSG_DEBUG::VALUE
126
+ log_info { "received debug message" }
127
127
  message = Message::SSH_MSG_DEBUG.new(logger: logger).decode payload
128
- log_debug { "received debug message: #{message.inspect}" }
129
128
  receive
130
129
  when Message::SSH_MSG_KEXINIT::VALUE
131
- log_debug { "received kexinit message" }
130
+ log_info { "received kexinit message" }
132
131
  if @in_kex
133
132
  payload
134
133
  else
@@ -139,16 +138,9 @@ module HrrRbSsh
139
138
  payload
140
139
  end
141
140
  rescue Error::ClosedTransport
142
- raise Error::ClosedTransport
143
- rescue EOFError => e
144
- close
145
- raise Error::ClosedTransport
146
- rescue IOError => e
147
- log_warn { "IO is closed" }
148
- close
149
- raise Error::ClosedTransport
150
- rescue Errno::ECONNRESET => e
151
- log_warn { "IO is RESET" }
141
+ raise
142
+ rescue EOFError, IOError, SystemCallError => e
143
+ log_info { "#{e.message} (#{e.class})" }
152
144
  close
153
145
  raise Error::ClosedTransport
154
146
  rescue => e
@@ -161,23 +153,20 @@ module HrrRbSsh
161
153
 
162
154
  def start
163
155
  log_info { "start transport" }
164
-
165
156
  begin
166
157
  exchange_version
167
158
  exchange_key
168
-
169
159
  case @mode
170
160
  when Mode::SERVER
171
161
  verify_service_request
172
162
  when Mode::CLIENT
173
163
  send_service_request
174
164
  end
175
-
176
165
  @closed = false
177
166
  rescue Error::ClosedTransport
178
- close
179
- raise Error::ClosedTransport
180
- rescue EOFError => e
167
+ raise
168
+ rescue EOFError, IOError, SystemCallError => e
169
+ log_info { "#{e.message} (#{e.class})" }
181
170
  close
182
171
  raise Error::ClosedTransport
183
172
  rescue => e
@@ -190,13 +179,20 @@ module HrrRbSsh
190
179
  end
191
180
 
192
181
  def close
193
- return if @closed
194
- log_info { "close transport" }
195
- @closed = true
196
- disconnect
197
- @incoming_compression_algorithm.close
198
- @outgoing_compression_algorithm.close
199
- log_info { "transport closed" }
182
+ @sender_monitor.synchronize do
183
+ return if @closed
184
+ log_info { "close transport" }
185
+ begin
186
+ disconnect
187
+ @incoming_compression_algorithm.close
188
+ @outgoing_compression_algorithm.close
189
+ rescue => e
190
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
191
+ ensure
192
+ @closed = true
193
+ log_info { "transport closed" }
194
+ end
195
+ end
200
196
  end
201
197
 
202
198
  def closed?
@@ -204,20 +200,9 @@ module HrrRbSsh
204
200
  end
205
201
 
206
202
  def disconnect
207
- return if @disconnected
208
203
  log_info { "disconnect transport" }
209
- @disconnected = true
210
- begin
211
- send_disconnect
212
- rescue Error::ClosedTransport
213
- log_warn { "Transport is closed" }
214
- rescue IOError
215
- log_warn { "IO is closed" }
216
- rescue => e
217
- log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
218
- ensure
219
- log_info { "transport disconnected" }
220
- end
204
+ send_disconnect
205
+ log_info { "transport disconnected" }
221
206
  end
222
207
 
223
208
  def exchange_version
@@ -356,7 +341,15 @@ module HrrRbSsh
356
341
  :'language tag' => ""
357
342
  }
358
343
  payload = Message::SSH_MSG_DISCONNECT.new(logger: logger).encode message
359
- send payload
344
+ @sender_monitor.synchronize do
345
+ begin
346
+ @sender.send self, payload
347
+ rescue IOError, SystemCallError => e
348
+ log_info { "#{e.message} (#{e.class})" }
349
+ rescue => e
350
+ log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
351
+ end
352
+ end
360
353
  end
361
354
 
362
355
  def send_kexinit
@@ -425,8 +418,6 @@ module HrrRbSsh
425
418
  def receive_service_request
426
419
  payload = @receiver.receive self
427
420
  message = Message::SSH_MSG_SERVICE_REQUEST.new(logger: logger).decode payload
428
-
429
- message
430
421
  end
431
422
 
432
423
  def send_service_accept service_name
@@ -35,7 +35,7 @@ module HrrRbSsh
35
35
  block_size = [transport.incoming_encryption_algorithm.block_size, minimum_block_size].max
36
36
  encrypted_packet.push transport.io.read(block_size)
37
37
  if (encrypted_packet.last == nil) || (encrypted_packet.last.length != block_size)
38
- log_warn { "IO is EOF" }
38
+ log_info { "IO is EOF" }
39
39
  raise EOFError
40
40
  end
41
41
  unencrypted_packet.push transport.incoming_encryption_algorithm.decrypt(encrypted_packet.last)
@@ -44,7 +44,7 @@ module HrrRbSsh
44
44
  following_packet_length = packet_length_field_length + packet_length - block_size
45
45
  encrypted_packet.push transport.io.read(following_packet_length)
46
46
  if (encrypted_packet.last == nil) || (encrypted_packet.last.length != following_packet_length)
47
- log_warn { "IO is EOF" }
47
+ log_info { "IO is EOF" }
48
48
  raise EOFError
49
49
  end
50
50
  unencrypted_packet.push transport.incoming_encryption_algorithm.decrypt(encrypted_packet.last)
@@ -56,7 +56,7 @@ module HrrRbSsh
56
56
  mac_length = transport.incoming_mac_algorithm.digest_length
57
57
  mac = transport.io.read mac_length
58
58
  if (mac == nil) || (mac.length != mac_length)
59
- log_warn { "IO is EOF" }
59
+ log_info { "IO is EOF" }
60
60
  raise EOFError
61
61
  end
62
62
  mac
@@ -2,5 +2,5 @@
2
2
  # vim: et ts=2 sw=2
3
3
 
4
4
  module HrrRbSsh
5
- VERSION = "0.4.1"
5
+ VERSION = "0.4.2"
6
6
  end
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.4.1
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: 2020-01-14 00:00:00.000000000 Z
11
+ date: 2020-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake