ssh_tunnel_proxy 2.1.3 → 3.0.0

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.
Files changed (109) hide show
  1. package/LICENSE +19 -3
  2. package/MIGRATION.md +227 -0
  3. package/README.md +360 -212
  4. package/build/bridge.d.ts +14 -0
  5. package/build/bridge.d.ts.map +1 -0
  6. package/build/bridge.js +12 -0
  7. package/build/bridge.js.map +1 -0
  8. package/build/connection.d.ts +60 -0
  9. package/build/connection.d.ts.map +1 -0
  10. package/build/connection.js +198 -0
  11. package/build/connection.js.map +1 -0
  12. package/build/credentials.d.ts +24 -0
  13. package/build/credentials.d.ts.map +1 -0
  14. package/build/credentials.js +102 -0
  15. package/build/credentials.js.map +1 -0
  16. package/build/errors.d.ts +19 -0
  17. package/build/errors.d.ts.map +1 -0
  18. package/build/errors.js +64 -0
  19. package/build/errors.js.map +1 -0
  20. package/build/forward-spec.d.ts +34 -0
  21. package/build/forward-spec.d.ts.map +1 -0
  22. package/build/forward-spec.js +175 -0
  23. package/build/forward-spec.js.map +1 -0
  24. package/build/index.d.ts +19 -0
  25. package/build/index.d.ts.map +1 -0
  26. package/build/index.js +71 -0
  27. package/build/index.js.map +1 -0
  28. package/build/legacy.d.ts +70 -0
  29. package/build/legacy.d.ts.map +1 -0
  30. package/build/legacy.js +188 -0
  31. package/build/legacy.js.map +1 -0
  32. package/build/local-forward.d.ts +31 -0
  33. package/build/local-forward.d.ts.map +1 -0
  34. package/build/local-forward.js +231 -0
  35. package/build/local-forward.js.map +1 -0
  36. package/build/model.d.ts +126 -0
  37. package/build/model.d.ts.map +1 -0
  38. package/build/model.js +55 -0
  39. package/build/model.js.map +1 -0
  40. package/build/port-policy.d.ts +43 -0
  41. package/build/port-policy.d.ts.map +1 -0
  42. package/build/port-policy.js +138 -0
  43. package/build/port-policy.js.map +1 -0
  44. package/build/remote-forward.d.ts +40 -0
  45. package/build/remote-forward.d.ts.map +1 -0
  46. package/build/remote-forward.js +226 -0
  47. package/build/remote-forward.js.map +1 -0
  48. package/build/tunnel.d.ts +121 -0
  49. package/build/tunnel.d.ts.map +1 -0
  50. package/build/tunnel.js +599 -0
  51. package/build/tunnel.js.map +1 -0
  52. package/examples/config.example.json +86 -0
  53. package/examples/setup_ssh.sh +12 -0
  54. package/examples/tunnel-cli.js +461 -0
  55. package/examples/tunnel-worker.js +98 -0
  56. package/examples/zrok-termux.ts +147 -0
  57. package/package.json +43 -53
  58. package/proto/sshtunnel/v1/tunnel.proto +343 -0
  59. package/dist/TestMessage.d.ts +0 -13
  60. package/dist/TestMessage.js +0 -32
  61. package/dist/TestMessage.js.map +0 -1
  62. package/dist/cjs/TestMessage.d.ts +0 -13
  63. package/dist/cjs/TestMessage.js +0 -32
  64. package/dist/cjs/TestMessage.js.map +0 -1
  65. package/dist/cjs/index.d.ts +0 -73
  66. package/dist/cjs/index.js +0 -621
  67. package/dist/cjs/index.js.map +0 -1
  68. package/dist/cjs/keypair_storage.d.ts +0 -12
  69. package/dist/cjs/keypair_storage.js +0 -143
  70. package/dist/cjs/keypair_storage.js.map +0 -1
  71. package/dist/cjs/ngrok_service.d.ts +0 -11
  72. package/dist/cjs/ngrok_service.js +0 -40
  73. package/dist/cjs/ngrok_service.js.map +0 -1
  74. package/dist/cjs/ssh2-node.d.ts +0 -1
  75. package/dist/cjs/ssh2-node.js +0 -221
  76. package/dist/cjs/ssh2-node.js.map +0 -1
  77. package/dist/esm/TestMessage.d.ts +0 -13
  78. package/dist/esm/TestMessage.js +0 -29
  79. package/dist/esm/TestMessage.js.map +0 -1
  80. package/dist/esm/index.d.ts +0 -73
  81. package/dist/esm/index.js +0 -616
  82. package/dist/esm/index.js.map +0 -1
  83. package/dist/esm/keypair_storage.d.ts +0 -12
  84. package/dist/esm/keypair_storage.js +0 -117
  85. package/dist/esm/keypair_storage.js.map +0 -1
  86. package/dist/esm/ngrok_service.d.ts +0 -11
  87. package/dist/esm/ngrok_service.js +0 -37
  88. package/dist/esm/ngrok_service.js.map +0 -1
  89. package/dist/esm/ssh2-node.d.ts +0 -1
  90. package/dist/esm/ssh2-node.js +0 -194
  91. package/dist/esm/ssh2-node.js.map +0 -1
  92. package/dist/index.d.ts +0 -73
  93. package/dist/index.js +0 -620
  94. package/dist/index.js.map +0 -1
  95. package/dist/keypair_storage.d.ts +0 -12
  96. package/dist/keypair_storage.js +0 -120
  97. package/dist/keypair_storage.js.map +0 -1
  98. package/dist/ngrok_service.d.ts +0 -11
  99. package/dist/ngrok_service.js +0 -40
  100. package/dist/ngrok_service.js.map +0 -1
  101. package/dist/ssh2-node.d.ts +0 -1
  102. package/dist/ssh2-node.js +0 -188
  103. package/dist/ssh2-node.js.map +0 -1
  104. package/dist/types/TestMessage.d.ts +0 -13
  105. package/dist/types/index.d.ts +0 -73
  106. package/dist/types/keypair_storage.d.ts +0 -12
  107. package/dist/types/ngrok_service.d.ts +0 -11
  108. package/dist/types/ssh2-node.d.ts +0 -1
  109. package/ssh2-node +0 -2
@@ -1,117 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
- function verb(n) { return function (v) { return step([n, v]); }; }
14
- function step(op) {
15
- if (f) throw new TypeError("Generator is already executing.");
16
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
- if (y = 0, t) op = [op[0] & 2, t.value];
19
- switch (op[0]) {
20
- case 0: case 1: t = op; break;
21
- case 4: _.label++; return { value: op[1], done: false };
22
- case 5: _.label++; y = op[1]; op = [0]; continue;
23
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
- default:
25
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
- if (t[2]) _.ops.pop();
30
- _.trys.pop(); continue;
31
- }
32
- op = body.call(thisArg, _);
33
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
- }
36
- };
37
- import { generatePrivateKey, parsePrivateKey } from 'sshpk';
38
- import * as keytar from 'keytar';
39
- var KeypairStorage = (function () {
40
- function KeypairStorage() {
41
- }
42
- KeypairStorage.prototype.generate_and_store_keypair = function (service_name, account) {
43
- return __awaiter(this, void 0, void 0, function () {
44
- var keypair, err_1;
45
- return __generator(this, function (_a) {
46
- switch (_a.label) {
47
- case 0:
48
- _a.trys.push([0, 2, , 3]);
49
- keypair = this.generate_keypair();
50
- return [4, keytar.setPassword(service_name, account, keypair.private_key)];
51
- case 1:
52
- _a.sent();
53
- return [2, keypair.public_key];
54
- case 2:
55
- err_1 = _a.sent();
56
- console.log('Error storing key:', err_1);
57
- throw (err_1);
58
- case 3: return [2];
59
- }
60
- });
61
- });
62
- };
63
- KeypairStorage.prototype.get_public_key_from_keychain = function (service_name, account) {
64
- return __awaiter(this, void 0, void 0, function () {
65
- var private_key, public_key, err_2;
66
- return __generator(this, function (_a) {
67
- switch (_a.label) {
68
- case 0:
69
- _a.trys.push([0, 2, , 3]);
70
- return [4, keytar.getPassword(service_name, account)];
71
- case 1:
72
- private_key = _a.sent();
73
- public_key = this.get_public_key_from_private(private_key);
74
- return [2, public_key];
75
- case 2:
76
- err_2 = _a.sent();
77
- console.log('Error getting key from keychain:', err_2);
78
- throw (err_2);
79
- case 3: return [2];
80
- }
81
- });
82
- });
83
- };
84
- KeypairStorage.prototype.get_public_key_from_private = function (private_key) {
85
- if (private_key) {
86
- try {
87
- var key = parsePrivateKey(private_key, 'pem');
88
- if (key)
89
- return key.toPublic().toString('ssh');
90
- }
91
- catch (err) {
92
- console.log('Error parsing private key:', err);
93
- }
94
- }
95
- return null;
96
- };
97
- KeypairStorage.prototype.generate_keypair = function () {
98
- var privateKey = generatePrivateKey('ed25519').toString('ssh');
99
- var publicKey = this.get_public_key_from_private(privateKey);
100
- return {
101
- public_key: publicKey,
102
- private_key: privateKey,
103
- };
104
- };
105
- KeypairStorage.prototype.get_keypair = function (service, server) {
106
- return keytar.getPassword(service, server);
107
- };
108
- KeypairStorage.prototype.set_keypair = function (service, server, key) {
109
- return keytar.setPassword(service, server, key);
110
- };
111
- KeypairStorage.prototype.delete_keypair = function (service, server) {
112
- return keytar.deletePassword(service, server);
113
- };
114
- return KeypairStorage;
115
- }());
116
- export { KeypairStorage };
117
- //# sourceMappingURL=keypair_storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keypair_storage.js","sourceRoot":"","sources":["../../src/keypair_storage.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC;IAAA;IA4DA,CAAC;IAzDc,mDAA0B,GAAvC,UAAwC,YAAoB,EAAE,OAAe;;;;;;;wBAE/D,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxC,WAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAAA;;wBAApE,SAAoE,CAAC;wBACrE,WAAO,OAAO,CAAC,UAAU,EAAC;;;wBAE1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAG,CAAC,CAAC;wBACvC,MAAK,CAAC,KAAG,CAAC,CAAC;;;;;KAElB;IAGY,qDAA4B,GAAzC,UAA0C,YAAoB,EAAE,OAAe;;;;;;;wBAEnD,WAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC,EAAA;;wBAA7D,WAAW,GAAG,SAA+C;wBAC7D,UAAU,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;wBACjE,WAAO,UAAU,EAAC;;;wBAElB,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,KAAG,CAAC,CAAC;wBACrD,MAAK,CAAC,KAAG,CAAC,CAAC;;;;;KAElB;IAGM,oDAA2B,GAAlC,UAAmC,WAAmB;QACpD,IAAI,WAAW,EAAE;YACf,IAAI;gBACF,IAAM,GAAG,GAAG,eAAe,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBAChD,IAAI,GAAG;oBAAE,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAChD;YAAC,OAAO,GAAG,EAAE;gBAEZ,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;aAChD;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,yCAAgB,GAAhB;QAGE,IAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjE,IAAM,SAAS,GAAG,IAAI,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;QAC/D,OAAO;YACL,UAAU,EAAE,SAAS;YACrB,WAAW,EAAE,UAAU;SACxB,CAAC;IACJ,CAAC;IACD,oCAAW,GAAX,UAAY,OAAe,EAAE,MAAc;QACzC,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,oCAAW,GAAX,UAAY,OAAe,EAAE,MAAc,EAAE,GAAW;QACtD,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,uCAAc,GAAd,UAAe,OAAe,EAAE,MAAc;QAC5C,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IACH,qBAAC;AAAD,CAAC,AA5DD,IA4DC"}
@@ -1,11 +0,0 @@
1
- import { Ngrok } from '@ngrok/ngrok-api';
2
- export type Hostport = {
3
- host: string;
4
- port: string;
5
- };
6
- export declare class NgrokApi {
7
- ngrok: Ngrok;
8
- constructor(apiToken: any);
9
- get_hostport<Hostport>(): Promise<Hostport>;
10
- parse_ngrok_hostport<Hostport>(endpoints: any): Hostport;
11
- }
@@ -1,37 +0,0 @@
1
- import { Ngrok } from '@ngrok/ngrok-api';
2
- var NgrokApi = (function () {
3
- function NgrokApi(apiToken) {
4
- var config = {
5
- apiToken: apiToken,
6
- baseUrl: undefined,
7
- };
8
- this.ngrok = new Ngrok(config);
9
- }
10
- NgrokApi.prototype.get_hostport = function () {
11
- var _this = this;
12
- return new Promise(function (resolve, reject) {
13
- _this.ngrok.endpoints.list().then(function (endpoints) {
14
- var hostport_obj = _this.parse_ngrok_hostport(endpoints);
15
- resolve(hostport_obj);
16
- }, function (err) {
17
- reject(err);
18
- });
19
- });
20
- };
21
- NgrokApi.prototype.parse_ngrok_hostport = function (endpoints) {
22
- if (endpoints[0] && endpoints[0].hostport) {
23
- var hostport = endpoints[0].hostport.split(':');
24
- var hostport_obj = {
25
- host: hostport[0],
26
- port: hostport[1],
27
- };
28
- return hostport_obj;
29
- }
30
- else {
31
- throw new Error('get_ngrok_hostport: no endpoints found');
32
- }
33
- };
34
- return NgrokApi;
35
- }());
36
- export { NgrokApi };
37
- //# sourceMappingURL=ngrok_service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ngrok_service.js","sourceRoot":"","sources":["../../src/ngrok_service.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,EAAe,MAAM,kBAAkB,CAAC;AAOtD;IAGE,kBAAY,QAAQ;QAClB,IAAM,MAAM,GAAgB;YAC1B,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,SAAS;SACnB,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,+BAAY,GAAZ;QAAA,iBAYC;QAXC,OAAO,IAAI,OAAO,CAAW,UAAC,OAAO,EAAE,MAAM;YAC3C,KAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,CAC9B,UAAC,SAAS;gBACR,IAAM,YAAY,GAAa,KAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;gBACpE,OAAO,CAAC,YAAY,CAAC,CAAC;YACxB,CAAC,EACD,UAAC,GAAG;gBACF,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAGD,uCAAoB,GAApB,UAA+B,SAAS;QACtC,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YACzC,IAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClD,IAAM,YAAY,GAAa;gBAC7B,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACjB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;aAClB,CAAC;YACF,OAAO,YAAY,CAAC;SACrB;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;SAC3D;IACH,CAAC;IACH,eAAC;AAAD,CAAC,AAtCD,IAsCC"}
@@ -1 +0,0 @@
1
- export declare function main(): void;
@@ -1,194 +0,0 @@
1
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
- return new (P || (P = Promise))(function (resolve, reject) {
4
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
- step((generator = generator.apply(thisArg, _arguments || [])).next());
8
- });
9
- };
10
- var __generator = (this && this.__generator) || function (thisArg, body) {
11
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
12
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
- function verb(n) { return function (v) { return step([n, v]); }; }
14
- function step(op) {
15
- if (f) throw new TypeError("Generator is already executing.");
16
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
- if (y = 0, t) op = [op[0] & 2, t.value];
19
- switch (op[0]) {
20
- case 0: case 1: t = op; break;
21
- case 4: _.label++; return { value: op[1], done: false };
22
- case 5: _.label++; y = op[1]; op = [0]; continue;
23
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
- default:
25
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
- if (t[2]) _.ops.pop();
30
- _.trys.pop(); continue;
31
- }
32
- op = body.call(thisArg, _);
33
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
- }
36
- };
37
- import * as process from 'process';
38
- import { readFileSync, existsSync } from 'fs';
39
- import { homedir } from 'os';
40
- import { Command } from 'commander';
41
- import { SSHTunnelProxy, KeypairStorage } from './index';
42
- function get_default_config() {
43
- var configs = [];
44
- try {
45
- var config_file = homedir() + '/.config/ssh_tunnel_proxy/config.json';
46
- if (existsSync(config_file)) {
47
- configs = JSON.parse(readFileSync(config_file).toString());
48
- }
49
- else {
50
- configs = null;
51
- }
52
- }
53
- catch (err) {
54
- console.log('Error loading config file:', err);
55
- }
56
- return configs;
57
- }
58
- export function main() {
59
- var _this = this;
60
- var program = new Command();
61
- program
62
- .name('ssh2-node')
63
- .description('Nodejs ssh2 command line client')
64
- .version('1.2.12')
65
- .option('-4 --forceIPv4 [forceIPv4]', 'Only connect via resolved IPv4 address for host. Default: false')
66
- .option('-6 --forceIPv6 [forceIPv6]', 'Only connect via resolved IPv6 address for host. Default: false')
67
- .option('-b --bind [bind]', 'bind_address')
68
- .option('-C --compress [compress]', 'Requests compression of all data')
69
- .option('-c --cipher [cipher]', 'cipher_spec')
70
- .option('-D --dynamic_forward [dynamic_forward]', " Specifies a local 'dynamic' application-level port forwarding.")
71
- .option('-e --escape [escape]', 'escape_char Sets the escape character for sessions with a pty.')
72
- .option('-F --config [config]', 'configfile')
73
- .option('-f --background [background]', 'Requests ssh to go to background just before command execution.')
74
- .option('-g --local_forward_remote [local_forward_remote]', 'Allows remote hosts to connect to local forwarded ports.')
75
- .option('-i --identity [identity]', 'Private key filename.')
76
- .option('-L --local_forward_out [local_forward_out...]', 'bind_address:port:host:hostport')
77
- .option('-l --login_name [login_name]', 'login_name')
78
- .option('-N --no_exec [no_exec]', 'Do not execute a remote command.')
79
- .option('-n --redirect_stdin [redirect_stdin]', 'Redirects stdin from /dev/null')
80
- .option('-o --option [option]', 'option')
81
- .option('-p --port [port]', 'port Port to connect to on the remote host.')
82
- .option('-q --quiet [quiet]', 'Quiet mode. Causes most warning and diagnostic messages to be suppressed.')
83
- .option('-R --local_forward_in [local_forward_in...]', 'bind_address:port:host:hostport')
84
- .option('-s --subsystem [subsystem]', 'May be used to request invocation of a subsystem on the remote system.')
85
- .option('-T --disable_tty [disable_tty]', 'Disable pseudo-tty allocation.')
86
- .option('-t --force_tty [force_tty]', 'Force pseudo-tty allocation.')
87
- .option('-V --version [version]', 'Display the version number and exit.')
88
- .option('-v --verbose [verbose]', 'Verbose mode. Causes ssh to print debugging messages about its progress.')
89
- .option('-W --forward_stdin_stdout [forward_stdin_stdout]', 'host:port Requests that standard input and output on the client be forwarded to host on port ver the secure channel.')
90
- .option('-X --x11 [x11]', 'Enables X11 forwarding.')
91
- .option('-x --x11_disable [x11_disable]', 'Disables X11 forwarding.')
92
- .option('-Y --x11_trusted [x11_trusted]', 'Enables trusted X11 forwarding.')
93
- .option('-y --log [log]', 'Send log information using the syslog(3)')
94
- .option('-H --ngrok [ngrok]', 'Obtain connectiion hostport from ngrok')
95
- .option('-J --keychain_service [keychain_service]', 'Service name to obtain private key from system keychain.')
96
- .option('-j --keychain_account [keychain_account]', 'Account name to obtain private key from system keychain.')
97
- .argument('[userhost_arg]', 'Connect to hostname in config.')
98
- .argument('[exec...]', 'Command to exec on remote host.');
99
- program.parse(process.argv);
100
- var opts = program.opts();
101
- var args = program.processedArgs;
102
- var username = '';
103
- var config_host = '';
104
- var host = '';
105
- var userhost_arg = "".concat(args[0]);
106
- args.shift();
107
- var cmd = args.join(' ');
108
- var exec = [];
109
- if (cmd.length > 0)
110
- exec.push(cmd);
111
- if (userhost_arg) {
112
- if (userhost_arg.indexOf('@') >= 0) {
113
- var userhost = userhost_arg.split('@');
114
- username = userhost[0];
115
- host = userhost[1];
116
- }
117
- else {
118
- config_host = userhost_arg;
119
- }
120
- }
121
- else {
122
- console.log('user@host or host name in config not provided');
123
- return;
124
- }
125
- var configs = null;
126
- if (config_host) {
127
- configs = get_default_config();
128
- if (!configs) {
129
- console.log('error: config host specified but configs file was not found');
130
- process.exit();
131
- }
132
- }
133
- else {
134
- var config = {
135
- hostname: 'cli',
136
- username: username,
137
- host: host,
138
- private_key_filename: (opts.identity) ? opts.identity.trim() : undefined,
139
- };
140
- configs = [config];
141
- }
142
- var keypairStorage = new KeypairStorage();
143
- var remote_server = '';
144
- configs.forEach(function (config) { return __awaiter(_this, void 0, void 0, function () {
145
- var service_name, _a, sshTunnelProxy;
146
- return __generator(this, function (_b) {
147
- switch (_b.label) {
148
- case 0:
149
- if (config.disabled)
150
- return [2];
151
- if (config_host && config_host !== config.hostname)
152
- return [2];
153
- remote_server = config_host;
154
- if (!config.service_name) return [3, 2];
155
- config.server_name = config.hostname || config_host || 'ssh_tunnel_proxy';
156
- service_name = config.service_name || 'ssh_client';
157
- _a = config;
158
- return [4, keypairStorage.get_keypair(service_name, config.server_name)];
159
- case 1:
160
- _a.private_key = _b.sent();
161
- _b.label = 2;
162
- case 2:
163
- opts.port && (config.port = opts.port);
164
- opts.local_forward_out && (config.proxy_ports = opts.local_forward_out);
165
- opts.local_forward_in && (config.remote_ports = opts.local_forward_in);
166
- opts.keychain_service && (config.service_name = opts.keychain_service);
167
- opts.keychain_account && (config.server_name = opts.keychain_account);
168
- opts.ngrok && (config.ngrok_api = opts.ngrok);
169
- opts.identity && (config.private_key_filename = opts.identity.trim());
170
- opts.compress && (config.compress = opts.compress);
171
- opts.cypher && (config.cypher = opts.cypher);
172
- if (exec.length > 0) {
173
- config.exec = exec;
174
- }
175
- else {
176
- config.shell = true;
177
- }
178
- sshTunnelProxy = new SSHTunnelProxy();
179
- sshTunnelProxy.debug_en = opts.verbose;
180
- return [4, sshTunnelProxy.connectSSH(config, null)];
181
- case 3:
182
- _b.sent();
183
- if (exec.length > 0) {
184
- process.exit();
185
- }
186
- return [2];
187
- }
188
- });
189
- }); });
190
- if (config_host && !remote_server) {
191
- console.log("Remote host ".concat(config_host, " not found"));
192
- }
193
- }
194
- //# sourceMappingURL=ssh2-node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ssh2-node.js","sourceRoot":"","sources":["../../src/ssh2-node.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,73 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- /// <reference types="node" />
4
- /// <reference types="node" />
5
- import { Server, Socket } from 'net';
6
- import { Writable } from 'stream';
7
- import { EventEmitter } from 'events';
8
- import { Client, Channel } from 'electron-ssh2';
9
- import { KeypairStorage } from './keypair_storage';
10
- import { NgrokApi } from './ngrok_service';
11
- import { main } from './ssh2-node';
12
- interface Listener {
13
- [key: string]: Server;
14
- }
15
- interface RemotePort {
16
- [key: string]: Socket;
17
- }
18
- export type SSHConfig = {
19
- hostname: string;
20
- username: string;
21
- password?: string;
22
- host?: string;
23
- port?: string;
24
- proxy_ports?: Array<string>;
25
- remote_ports?: Array<string>;
26
- private_key?: string | null;
27
- private_key_filename?: string | null;
28
- disabled?: boolean;
29
- server_name?: string;
30
- service_name?: string;
31
- compress?: string;
32
- cypher?: string;
33
- exec?: Array<string>;
34
- shell?: boolean;
35
- ngrok_api?: string;
36
- keepaliveInterval?: number;
37
- };
38
- export declare class SSHTunnelProxy extends EventEmitter {
39
- protected client: Client;
40
- protected keypairStorage: KeypairStorage;
41
- protected config: SSHConfig;
42
- protected listener: Listener;
43
- protected remote_port: RemotePort;
44
- protected retries: number;
45
- protected networkOnline: boolean;
46
- protected _tunnelReadyTimeout: ReturnType<typeof setTimeout>;
47
- debug_en: boolean;
48
- debug_ssh: boolean;
49
- constructor();
50
- protected shutdown_client(opts: any): void;
51
- protected close_sockets(proxy_ports: Array<string>): void;
52
- protected close_remote_forwards(remote_ports: Array<string>): void;
53
- protected setup_local_forward(socket: Socket, remote_hostname: string, remote_port: string): void;
54
- protected setup_remote_forward(remote_port: string): Promise<number>;
55
- setupRemotePorts(remote_ports: Array<string>): Promise<void>;
56
- setupProxyPorts(proxy_ports: Array<string>): Promise<void>;
57
- execCmd(cmd: string, dataStream?: Writable, errStream?: Writable): Promise<void>;
58
- protected remote_shell(err: Error, stream: Channel): void;
59
- protected cleanup_events(client: Client): void;
60
- do_ssh_connect(opts: SSHConfig): Promise<void>;
61
- validate_port_number(port: number, whitelist: object): boolean;
62
- validate_local_forward(proxy_ports: Array<string>, whitelist: object): boolean;
63
- protected ssh_retry_connect(opts: SSHConfig): void;
64
- protected ssh_start_tunnel(opts: SSHConfig): Promise<unknown>;
65
- connectSSH(opts: SSHConfig, whitelist: object | null): Promise<void>;
66
- onNetworkOnline(): void;
67
- onNetworkOffline(): void;
68
- generateAndStoreKeypair(serviceName: string, account: string): void;
69
- getPublicKey(serviceName: string, account: string): void;
70
- getClient(): Client;
71
- protected debug(...args: any[]): void;
72
- }
73
- export { KeypairStorage, NgrokApi, main as sshcli };