bdy 1.9.48 → 1.9.50-dev

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bdy",
3
3
  "preferGlobal": false,
4
- "version": "1.9.48",
4
+ "version": "1.9.50-dev",
5
5
  "type": "commonjs",
6
6
  "license": "MIT",
7
7
  "scripts": {
@@ -10,6 +10,18 @@ const crypto_1 = require("crypto");
10
10
  const child_process_1 = require("child_process");
11
11
  const sftp_1 = __importDefault(require("./sftp"));
12
12
  const buddy_1 = __importDefault(require("../api/buddy"));
13
+ const pipeStreamToChannel = (stream, channel) => {
14
+ channel.once('exit', (code, signal) => {
15
+ logger_js_1.default.debug(`shell channel exit: ${code}, signal: ${signal}`);
16
+ if (stream.exit)
17
+ stream.exit(signal || code);
18
+ });
19
+ channel.on('close', () => {
20
+ stream.end();
21
+ });
22
+ channel.pipe(stream, { end: false }).pipe(channel);
23
+ channel.stderr.pipe(stream.stderr);
24
+ };
13
25
  class ServerSsh extends events_1.default {
14
26
  constructor(agent, login, password, hostKey) {
15
27
  super();
@@ -148,6 +160,7 @@ class ServerSsh extends events_1.default {
148
160
  let pty;
149
161
  let x11;
150
162
  const closeSession = () => {
163
+ logger_js_1.default.debug('ssh close session');
151
164
  env = null;
152
165
  pty = null;
153
166
  x11 = null;
@@ -161,13 +174,15 @@ class ServerSsh extends events_1.default {
161
174
  channel.removeAllListeners();
162
175
  channel = null;
163
176
  }
164
- if (client) {
165
- client.end();
166
- }
177
+ client.removeListener('close', closeSession);
178
+ client = null;
167
179
  };
180
+ client.on('close', closeSession);
168
181
  session.on('close', closeSession);
169
182
  session.on('end', closeSession);
170
183
  session.on('pty', (accept, reject, info) => {
184
+ logger_js_1.default.debug('ssh pty');
185
+ logger_js_1.default.debug(info);
171
186
  if (!proxyClient) {
172
187
  if (reject)
173
188
  reject();
@@ -178,6 +193,8 @@ class ServerSsh extends events_1.default {
178
193
  accept();
179
194
  });
180
195
  session.on('window-change', (accept, reject, info) => {
196
+ logger_js_1.default.debug('ssh window-change');
197
+ logger_js_1.default.debug(info);
181
198
  if (!proxyClient) {
182
199
  if (reject)
183
200
  reject();
@@ -195,6 +212,7 @@ class ServerSsh extends events_1.default {
195
212
  accept();
196
213
  });
197
214
  session.on('shell', (accept, reject) => {
215
+ logger_js_1.default.debug('ssh shell');
198
216
  if (!proxyClient || !accept) {
199
217
  if (reject)
200
218
  reject();
@@ -210,16 +228,12 @@ class ServerSsh extends events_1.default {
210
228
  reject();
211
229
  return;
212
230
  }
213
- channel = c;
214
- channel.once('exit', (code) => {
215
- if (stream && stream.exit)
216
- stream.exit(code);
217
- });
218
- stream.pipe(channel);
219
- channel.pipe(stream);
231
+ pipeStreamToChannel(stream, c);
220
232
  });
221
233
  });
222
234
  session.on('signal', (accept, reject, info) => {
235
+ logger_js_1.default.debug('ssh signal');
236
+ logger_js_1.default.debug(info);
223
237
  const { name } = info;
224
238
  if (!proxyClient || !name || !channel || !channel.signal) {
225
239
  if (reject)
@@ -231,6 +245,8 @@ class ServerSsh extends events_1.default {
231
245
  accept();
232
246
  });
233
247
  session.on('subsystem', (accept, reject, info) => {
248
+ logger_js_1.default.debug('ssh subsystem');
249
+ logger_js_1.default.debug(info);
234
250
  const { name } = info;
235
251
  if (!proxyClient || !accept || !name) {
236
252
  if (reject)
@@ -244,16 +260,12 @@ class ServerSsh extends events_1.default {
244
260
  reject();
245
261
  return;
246
262
  }
247
- channel = c;
248
- channel.once('exit', (code) => {
249
- if (stream && stream.exit)
250
- stream.exit(code);
251
- });
252
- stream.pipe(channel);
253
- channel.pipe(stream);
263
+ pipeStreamToChannel(stream, c);
254
264
  });
255
265
  });
256
266
  session.on('x11', (accept, reject, info) => {
267
+ logger_js_1.default.debug('ssh x11');
268
+ logger_js_1.default.debug(info);
257
269
  if (!proxyClient) {
258
270
  if (reject)
259
271
  reject();
@@ -264,6 +276,8 @@ class ServerSsh extends events_1.default {
264
276
  accept();
265
277
  });
266
278
  session.on('exec', (accept, reject, info) => {
279
+ logger_js_1.default.debug('ssh exec');
280
+ logger_js_1.default.debug(info);
267
281
  if (!info.command || !accept) {
268
282
  if (reject)
269
283
  reject();
@@ -284,16 +298,12 @@ class ServerSsh extends events_1.default {
284
298
  reject();
285
299
  return;
286
300
  }
287
- channel = c;
288
- channel.once('exit', (code) => {
289
- if (stream && stream.exit)
290
- stream.exit(code);
291
- });
292
- stream.pipe(channel);
293
- channel.pipe(stream);
301
+ pipeStreamToChannel(stream, c);
294
302
  });
295
303
  });
296
304
  session.on('env', (accept, reject, info) => {
305
+ logger_js_1.default.debug('ssh env');
306
+ logger_js_1.default.debug(info);
297
307
  Object.keys(info || {}).forEach((key) => {
298
308
  env[key] = info[key];
299
309
  });
@@ -301,6 +311,7 @@ class ServerSsh extends events_1.default {
301
311
  accept();
302
312
  });
303
313
  session.on('sftp', (accept, reject) => {
314
+ logger_js_1.default.debug('sftp');
304
315
  if (!sftp && accept) {
305
316
  sftp = new sftp_1.default(accept());
306
317
  }
@@ -310,14 +321,15 @@ class ServerSsh extends events_1.default {
310
321
  });
311
322
  }
312
323
  processClient(client) {
324
+ logger_js_1.default.debug('new ssh client');
313
325
  let proxyClient;
314
326
  client.setNoDelay();
315
327
  client.on('authentication', async (ctx) => {
316
328
  proxyClient = await this.authenticateClient(ctx);
329
+ logger_js_1.default.debug('ssh authentication', !!proxyClient);
317
330
  });
318
331
  client.on('close', () => {
319
- client.removeAllListeners();
320
- client = null;
332
+ logger_js_1.default.debug('ssh close');
321
333
  if (proxyClient) {
322
334
  try {
323
335
  proxyClient.removeAllListeners();
@@ -328,6 +340,10 @@ class ServerSsh extends events_1.default {
328
340
  }
329
341
  proxyClient = null;
330
342
  }
343
+ setTimeout(() => {
344
+ client.removeAllListeners();
345
+ client = null;
346
+ }, 1000);
331
347
  });
332
348
  client.on('error', (err) => {
333
349
  logger_js_1.default.debug('Error on ssh server client');
@@ -335,6 +351,7 @@ class ServerSsh extends events_1.default {
335
351
  client.end();
336
352
  });
337
353
  client.on('session', (accept) => {
354
+ logger_js_1.default.debug('ssh session');
338
355
  this.clientSession(accept(), client, proxyClient);
339
356
  });
340
357
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bdy",
3
3
  "preferGlobal": false,
4
- "version": "1.9.48",
4
+ "version": "1.9.50-dev",
5
5
  "type": "commonjs",
6
6
  "license": "MIT",
7
7
  "scripts": {