@theia/remote 1.61.0-next.8 → 1.61.1

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 (25) hide show
  1. package/lib/electron-browser/remote-preferences.d.ts +1 -0
  2. package/lib/electron-browser/remote-preferences.d.ts.map +1 -1
  3. package/lib/electron-browser/remote-preferences.js +6 -0
  4. package/lib/electron-browser/remote-preferences.js.map +1 -1
  5. package/lib/electron-browser/remote-ssh-contribution.d.ts +3 -0
  6. package/lib/electron-browser/remote-ssh-contribution.d.ts.map +1 -1
  7. package/lib/electron-browser/remote-ssh-contribution.js +59 -1
  8. package/lib/electron-browser/remote-ssh-contribution.js.map +1 -1
  9. package/lib/electron-common/remote-ssh-connection-provider.d.ts +7 -0
  10. package/lib/electron-common/remote-ssh-connection-provider.d.ts.map +1 -1
  11. package/lib/electron-common/remote-ssh-connection-provider.js.map +1 -1
  12. package/lib/electron-node/ssh/remote-ssh-connection-provider.d.ts +6 -2
  13. package/lib/electron-node/ssh/remote-ssh-connection-provider.d.ts.map +1 -1
  14. package/lib/electron-node/ssh/remote-ssh-connection-provider.js +61 -3
  15. package/lib/electron-node/ssh/remote-ssh-connection-provider.js.map +1 -1
  16. package/lib/electron-node/ssh/ssh-identity-file-collector.d.ts +1 -1
  17. package/lib/electron-node/ssh/ssh-identity-file-collector.d.ts.map +1 -1
  18. package/lib/electron-node/ssh/ssh-identity-file-collector.js +2 -2
  19. package/lib/electron-node/ssh/ssh-identity-file-collector.js.map +1 -1
  20. package/package.json +7 -6
  21. package/src/electron-browser/remote-preferences.ts +10 -0
  22. package/src/electron-browser/remote-ssh-contribution.ts +70 -2
  23. package/src/electron-common/remote-ssh-connection-provider.ts +9 -0
  24. package/src/electron-node/ssh/remote-ssh-connection-provider.ts +74 -4
  25. package/src/electron-node/ssh/ssh-identity-file-collector.ts +2 -2
@@ -3,6 +3,7 @@ import { PreferenceProxy, PreferenceSchema } from '@theia/core/lib/browser/prefe
3
3
  export declare const RemotePreferenceSchema: PreferenceSchema;
4
4
  export interface RemoteConfiguration {
5
5
  'remote.nodeDownloadTemplate': string;
6
+ 'remote.ssh.configFile': string;
6
7
  }
7
8
  export declare const RemotePreferenceContribution: unique symbol;
8
9
  export declare const RemotePreferences: unique symbol;
@@ -1 +1 @@
1
- {"version":3,"file":"remote-preferences.d.ts","sourceRoot":"","sources":["../../src/electron-browser/remote-preferences.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EACH,eAAe,EACf,gBAAgB,EAEnB,MAAM,qCAAqC,CAAC;AAW7C,eAAO,MAAM,sBAAsB,EAAE,gBAYpC,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAChC,6BAA6B,EAAE,MAAM,CAAC;CACzC;AAED,eAAO,MAAM,4BAA4B,eAAyC,CAAC;AACnF,eAAO,MAAM,iBAAiB,eAAsC,CAAC;AACrE,MAAM,MAAM,iBAAiB,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;AAErE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,IAAI,CAOjE"}
1
+ {"version":3,"file":"remote-preferences.d.ts","sourceRoot":"","sources":["../../src/electron-browser/remote-preferences.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EACH,eAAe,EACf,gBAAgB,EAEnB,MAAM,qCAAqC,CAAC;AAW7C,eAAO,MAAM,sBAAsB,EAAE,gBAoBpC,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAChC,6BAA6B,EAAE,MAAM,CAAC;IACtC,uBAAuB,EAAE,MAAM,CAAC;CACnC;AAED,eAAO,MAAM,4BAA4B,eAAyC,CAAC;AACnF,eAAO,MAAM,iBAAiB,eAAsC,CAAC;AACrE,MAAM,MAAM,iBAAiB,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAC;AAErE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,GAAG,IAAI,CAOjE"}
@@ -16,6 +16,7 @@
16
16
  // *****************************************************************************
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.bindRemotePreferences = exports.RemotePreferences = exports.RemotePreferenceContribution = exports.RemotePreferenceSchema = void 0;
19
+ const core_1 = require("@theia/core");
19
20
  const preferences_1 = require("@theia/core/lib/browser/preferences");
20
21
  const nls_1 = require("@theia/core/lib/common/nls");
21
22
  const injectable_preference_proxy_1 = require("@theia/core/lib/browser/preferences/injectable-preference-proxy");
@@ -33,6 +34,11 @@ exports.RemotePreferenceSchema = {
33
34
  default: '',
34
35
  markdownDescription: nls_1.nls.localize('theia/remote/nodeDownloadTemplate', 'Controls the template used to download the node.js binaries for the remote backend. Points to the official node.js website by default. Uses multiple placeholders:') + '\n- ' + nodeDownloadTemplateParts.join('\n- ')
35
36
  },
37
+ 'remote.ssh.configFile': {
38
+ type: 'string',
39
+ default: core_1.OS.backend.isWindows ? '${env:USERPROFILE}\\.ssh\\config' : '${env:HOME}/.ssh/config',
40
+ markdownDescription: nls_1.nls.localize('theia/remote/ssh/configFile', 'Remote SSH Config file')
41
+ },
36
42
  }
37
43
  };
38
44
  exports.RemotePreferenceContribution = Symbol('RemotePreferenceContribution');
@@ -1 +1 @@
1
- {"version":3,"file":"remote-preferences.js","sourceRoot":"","sources":["../../src/electron-browser/remote-preferences.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAGhF,qEAI6C;AAC7C,oDAAiD;AACjD,iHAAyG;AAEzG,MAAM,yBAAyB,GAAG;IAC9B,SAAG,CAAC,QAAQ,CAAC,0CAA0C,EAAE,uCAAuC,CAAC;IACjG,SAAG,CAAC,QAAQ,CAAC,qCAAqC,EAAE,4EAA4E,CAAC;IACjI,SAAG,CAAC,QAAQ,CAAC,uCAAuC,EAAE,8CAA8C,CAAC;IACrG,SAAG,CAAC,QAAQ,CAAC,sCAAsC,EAAE,wGAAwG,CAAC;CACjK,CAAC;AAEW,QAAA,sBAAsB,GAAqB;IACpD,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE;QACR,6BAA6B,EAAE;YAC3B,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE;YACX,mBAAmB,EAAE,SAAG,CAAC,QAAQ,CAC7B,mCAAmC,EACnC,oKAAoK,CACvK,GAAG,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC;SACtD;KACJ;CACJ,CAAC;AAMW,QAAA,4BAA4B,GAAG,MAAM,CAAC,8BAA8B,CAAC,CAAC;AACtE,QAAA,iBAAiB,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC;AAGrE,SAAgB,qBAAqB,CAAC,IAAqB;IACvD,IAAI,CAAC,yBAAiB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;QACzC,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAyB,oDAAsB,CAAC,CAAC;QAClF,OAAO,OAAO,CAAC,8BAAsB,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACtB,IAAI,CAAC,oCAA4B,CAAC,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,8BAAsB,EAAE,CAAC,CAAC;IACvF,IAAI,CAAC,oCAAsB,CAAC,CAAC,SAAS,CAAC,oCAA4B,CAAC,CAAC;AACzE,CAAC;AAPD,sDAOC"}
1
+ {"version":3,"file":"remote-preferences.js","sourceRoot":"","sources":["../../src/electron-browser/remote-preferences.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEhF,sCAAiC;AAEjC,qEAI6C;AAC7C,oDAAiD;AACjD,iHAAyG;AAEzG,MAAM,yBAAyB,GAAG;IAC9B,SAAG,CAAC,QAAQ,CAAC,0CAA0C,EAAE,uCAAuC,CAAC;IACjG,SAAG,CAAC,QAAQ,CAAC,qCAAqC,EAAE,4EAA4E,CAAC;IACjI,SAAG,CAAC,QAAQ,CAAC,uCAAuC,EAAE,8CAA8C,CAAC;IACrG,SAAG,CAAC,QAAQ,CAAC,sCAAsC,EAAE,wGAAwG,CAAC;CACjK,CAAC;AAEW,QAAA,sBAAsB,GAAqB;IACpD,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE;QACR,6BAA6B,EAAE;YAC3B,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE;YACX,mBAAmB,EAAE,SAAG,CAAC,QAAQ,CAC7B,mCAAmC,EACnC,oKAAoK,CACvK,GAAG,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC;SACtD;QACD,uBAAuB,EAAE;YACrB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,SAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,yBAAyB;YAC9F,mBAAmB,EAAE,SAAG,CAAC,QAAQ,CAC7B,6BAA6B,EAC7B,wBAAwB,CAC3B;SACJ;KACJ;CACJ,CAAC;AAOW,QAAA,4BAA4B,GAAG,MAAM,CAAC,8BAA8B,CAAC,CAAC;AACtE,QAAA,iBAAiB,GAAG,MAAM,CAAC,2BAA2B,CAAC,CAAC;AAGrE,SAAgB,qBAAqB,CAAC,IAAqB;IACvD,IAAI,CAAC,yBAAiB,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;QACzC,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAyB,oDAAsB,CAAC,CAAC;QAClF,OAAO,OAAO,CAAC,8BAAsB,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACtB,IAAI,CAAC,oCAA4B,CAAC,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,8BAAsB,EAAE,CAAC,CAAC;IACvF,IAAI,CAAC,oCAAsB,CAAC,CAAC,SAAS,CAAC,oCAA4B,CAAC,CAAC;AACzE,CAAC;AAPD,sDAOC"}
@@ -5,6 +5,7 @@ import { RemotePreferences } from './remote-preferences';
5
5
  export declare namespace RemoteSSHCommands {
6
6
  const CONNECT: Command;
7
7
  const CONNECT_CURRENT_WINDOW: Command;
8
+ const CONNECT_CURRENT_WINDOW_TO_CONFIG_HOST: Command;
8
9
  }
9
10
  export declare class RemoteSSHContribution extends AbstractRemoteRegistryContribution {
10
11
  protected readonly quickInputService: QuickInputService;
@@ -12,6 +13,8 @@ export declare class RemoteSSHContribution extends AbstractRemoteRegistryContrib
12
13
  protected readonly messageService: MessageService;
13
14
  protected readonly remotePreferences: RemotePreferences;
14
15
  registerRemoteCommands(registry: RemoteRegistry): void;
16
+ getConfigFilePath(): Promise<string | undefined>;
17
+ connectToConfigHost(): Promise<void>;
15
18
  connect(newWindow: boolean): Promise<void>;
16
19
  sendSSHConnect(host: string, user: string): Promise<string>;
17
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"remote-ssh-contribution.d.ts","sourceRoot":"","sources":["../../src/electron-browser/remote-ssh-contribution.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAO,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,kCAAkC,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,yBAAiB,iBAAiB,CAAC;IACxB,MAAM,OAAO,EAAE,OAIO,CAAC;IACvB,MAAM,sBAAsB,EAAE,OAIR,CAAC;CACjC;AAED,qBACa,qBAAsB,SAAQ,kCAAkC;IAGzE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAGxD,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;IAGtE,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAGlD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAExD,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAShD,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC1C,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAOpE"}
1
+ {"version":3,"file":"remote-ssh-contribution.d.ts","sourceRoot":"","sources":["../../src/electron-browser/remote-ssh-contribution.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAO,iBAAiB,EAAkB,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAE,kCAAkC,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,yBAAiB,iBAAiB,CAAC;IACxB,MAAM,OAAO,EAAE,OAIO,CAAC;IACvB,MAAM,sBAAsB,EAAE,OAIR,CAAC;IACvB,MAAM,qCAAqC,EAAE,OAIX,CAAC;CAC7C;AAED,qBACa,qBAAsB,SAAQ,kCAAkC;IAGzE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAGxD,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;IAGtE,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAGlD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAExD,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAYhD,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIhD,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IA6CpC,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA4C1C,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAQpE"}
@@ -22,6 +22,7 @@ const inversify_1 = require("@theia/core/shared/inversify");
22
22
  const remote_ssh_connection_provider_1 = require("../electron-common/remote-ssh-connection-provider");
23
23
  const remote_registry_contribution_1 = require("./remote-registry-contribution");
24
24
  const remote_preferences_1 = require("./remote-preferences");
25
+ const ssh_config_1 = require("ssh-config");
25
26
  var RemoteSSHCommands;
26
27
  (function (RemoteSSHCommands) {
27
28
  RemoteSSHCommands.CONNECT = core_1.Command.toLocalizedCommand({
@@ -34,6 +35,11 @@ var RemoteSSHCommands;
34
35
  category: 'SSH',
35
36
  label: 'Connect Current Window to Host...',
36
37
  }, 'theia/remoteSSH/connect');
38
+ RemoteSSHCommands.CONNECT_CURRENT_WINDOW_TO_CONFIG_HOST = core_1.Command.toLocalizedCommand({
39
+ id: 'remote.ssh.connectToConfigHost',
40
+ category: 'SSH',
41
+ label: 'Connect Current Window to Host in Config File...',
42
+ }, 'theia/remoteSSH/connectToConfigHost');
37
43
  })(RemoteSSHCommands || (exports.RemoteSSHCommands = RemoteSSHCommands = {}));
38
44
  let RemoteSSHContribution = class RemoteSSHContribution extends remote_registry_contribution_1.AbstractRemoteRegistryContribution {
39
45
  registerRemoteCommands(registry) {
@@ -43,6 +49,49 @@ let RemoteSSHContribution = class RemoteSSHContribution extends remote_registry_
43
49
  registry.registerCommand(RemoteSSHCommands.CONNECT_CURRENT_WINDOW, {
44
50
  execute: () => this.connect(false)
45
51
  });
52
+ registry.registerCommand(RemoteSSHCommands.CONNECT_CURRENT_WINDOW_TO_CONFIG_HOST, {
53
+ execute: () => this.connectToConfigHost()
54
+ });
55
+ }
56
+ async getConfigFilePath() {
57
+ return this.remotePreferences['remote.ssh.configFile'];
58
+ }
59
+ async connectToConfigHost() {
60
+ var _a, _b;
61
+ const quickPicks = [];
62
+ const sshConfig = await this.sshConnectionProvider.getSSHConfig(await this.getConfigFilePath());
63
+ const wildcardCheck = /[\?\*\%]/;
64
+ for (const record of sshConfig) {
65
+ // check if its a section and if it has a single value
66
+ if (!('config' in record) || !(typeof record.value === 'string')) {
67
+ continue;
68
+ }
69
+ if (record.param.toLowerCase() === 'host' && !wildcardCheck.test(record.value)) {
70
+ const rec = ((record.config)
71
+ .filter((entry) => entry.type === ssh_config_1.default.DIRECTIVE))
72
+ .reduce((pv, item) => ({ ...pv, [item.param.toLowerCase()]: item.value }), { 'host': record.value });
73
+ const host = (rec.hostname || rec.host) + ':' + (rec.port || '22');
74
+ const user = rec.user || 'root';
75
+ quickPicks.push({
76
+ label: rec.host,
77
+ id: user + '@' + host
78
+ });
79
+ }
80
+ }
81
+ const selection = await ((_a = this.quickInputService) === null || _a === void 0 ? void 0 : _a.showQuickPick(quickPicks, {
82
+ placeholder: core_1.nls.localizeByDefault('Select an option to open a Remote Window')
83
+ }));
84
+ if (selection && selection.id) {
85
+ try {
86
+ let [user, host] = selection.id.split('@', 2);
87
+ host = selection.label;
88
+ const remotePort = await this.sendSSHConnect(host, user);
89
+ this.openRemote(remotePort, false);
90
+ }
91
+ catch (err) {
92
+ this.messageService.error(`${core_1.nls.localize('theia/remote/sshFailure', 'Could not open SSH connection to remote.')} ${(_b = err.message) !== null && _b !== void 0 ? _b : String(err)}`);
93
+ }
94
+ }
46
95
  }
47
96
  async connect(newWindow) {
48
97
  var _a;
@@ -61,6 +110,14 @@ let RemoteSSHContribution = class RemoteSSHContribution extends remote_registry_
61
110
  user = split[0];
62
111
  host = split[1];
63
112
  }
113
+ if (!user) {
114
+ const configHost = await this.sshConnectionProvider.matchSSHConfigHost(host, undefined, await this.getConfigFilePath());
115
+ if (configHost) {
116
+ if (!user && configHost.user) {
117
+ user = configHost.user;
118
+ }
119
+ }
120
+ }
64
121
  if (!user) {
65
122
  user = await this.quickInputService.input({
66
123
  title: core_1.nls.localize('theia/remote/enterUser', 'Enter SSH user name'),
@@ -83,7 +140,8 @@ let RemoteSSHContribution = class RemoteSSHContribution extends remote_registry_
83
140
  return this.sshConnectionProvider.establishConnection({
84
141
  host,
85
142
  user,
86
- nodeDownloadTemplate: this.remotePreferences['remote.nodeDownloadTemplate']
143
+ nodeDownloadTemplate: this.remotePreferences['remote.nodeDownloadTemplate'],
144
+ customConfigFile: await this.getConfigFilePath()
87
145
  });
88
146
  }
89
147
  };
@@ -1 +1 @@
1
- {"version":3,"file":"remote-ssh-contribution.js","sourceRoot":"","sources":["../../src/electron-browser/remote-ssh-contribution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-ssh-contribution.js","sourceRoot":"","sources":["../../src/electron-browser/remote-ssh-contribution.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,18 @@
1
+ import * as SshConfig from 'ssh-config';
1
2
  export declare const RemoteSSHConnectionProviderPath = "/remote/ssh";
2
3
  export declare const RemoteSSHConnectionProvider: unique symbol;
3
4
  export interface RemoteSSHConnectionProviderOptions {
4
5
  user: string;
5
6
  host: string;
6
7
  nodeDownloadTemplate?: string;
8
+ customConfigFile?: string;
9
+ }
10
+ export interface SSHConfig extends Array<SshConfig.Line> {
11
+ compute(opts: string | SshConfig.MatchOptions): Record<string, string | string[]>;
7
12
  }
8
13
  export interface RemoteSSHConnectionProvider {
9
14
  establishConnection(options: RemoteSSHConnectionProviderOptions): Promise<string>;
15
+ getSSHConfig(customConfigFile?: string): Promise<SSHConfig>;
16
+ matchSSHConfigHost(host: string, user?: string, customConfigFile?: string): Promise<Record<string, string | string[]> | undefined>;
10
17
  }
11
18
  //# sourceMappingURL=remote-ssh-connection-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"remote-ssh-connection-provider.d.ts","sourceRoot":"","sources":["../../src/electron-common/remote-ssh-connection-provider.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,+BAA+B,gBAAgB,CAAC;AAE7D,eAAO,MAAM,2BAA2B,eAAwC,CAAC;AAEjF,MAAM,WAAW,kCAAkC;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,2BAA2B;IACxC,mBAAmB,CAAC,OAAO,EAAE,kCAAkC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACrF"}
1
+ {"version":3,"file":"remote-ssh-connection-provider.d.ts","sourceRoot":"","sources":["../../src/electron-common/remote-ssh-connection-provider.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,+BAA+B,gBAAgB,CAAC;AAE7D,eAAO,MAAM,2BAA2B,eAAwC,CAAC;AAEjF,MAAM,WAAW,kCAAkC;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;IACpD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,2BAA2B;IACxC,mBAAmB,CAAC,OAAO,EAAE,kCAAkC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClF,YAAY,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5D,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;CACtI"}
@@ -1 +1 @@
1
- {"version":3,"file":"remote-ssh-connection-provider.js","sourceRoot":"","sources":["../../src/electron-common/remote-ssh-connection-provider.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEnE,QAAA,+BAA+B,GAAG,aAAa,CAAC;AAEhD,QAAA,2BAA2B,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC"}
1
+ {"version":3,"file":"remote-ssh-connection-provider.js","sourceRoot":"","sources":["../../src/electron-common/remote-ssh-connection-provider.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAInE,QAAA,+BAA+B,GAAG,aAAa,CAAC;AAEhD,QAAA,2BAA2B,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC"}
@@ -3,12 +3,13 @@ import * as ssh2 from 'ssh2';
3
3
  import * as net from 'net';
4
4
  import SftpClient = require('ssh2-sftp-client');
5
5
  import { Event, MessageService, QuickInputService } from '@theia/core';
6
- import { RemoteSSHConnectionProvider, RemoteSSHConnectionProviderOptions } from '../../electron-common/remote-ssh-connection-provider';
6
+ import { RemoteSSHConnectionProvider, RemoteSSHConnectionProviderOptions, SSHConfig } from '../../electron-common/remote-ssh-connection-provider';
7
7
  import { RemoteConnectionService } from '../remote-connection-service';
8
8
  import { RemoteProxyServerProvider } from '../remote-proxy-server-provider';
9
9
  import { RemoteConnection, RemoteExecOptions, RemoteExecResult, RemoteExecTester } from '../remote-types';
10
10
  import { SSHIdentityFileCollector, SSHKey } from './ssh-identity-file-collector';
11
11
  import { RemoteSetupService } from '../setup/remote-setup-service';
12
+ import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
12
13
  export declare class RemoteSSHConnectionProviderImpl implements RemoteSSHConnectionProvider {
13
14
  protected readonly remoteConnectionService: RemoteConnectionService;
14
15
  protected readonly serverProvider: RemoteProxyServerProvider;
@@ -16,10 +17,13 @@ export declare class RemoteSSHConnectionProviderImpl implements RemoteSSHConnect
16
17
  protected readonly remoteSetup: RemoteSetupService;
17
18
  protected readonly quickInputService: QuickInputService;
18
19
  protected readonly messageService: MessageService;
20
+ protected readonly envVariablesServer: EnvVariablesServer;
19
21
  protected passwordRetryCount: number;
20
22
  protected passphraseRetryCount: number;
23
+ matchSSHConfigHost(host: string, user?: string, customConfigFile?: string): Promise<Record<string, string | string[]> | undefined>;
24
+ getSSHConfig(customConfigFile?: string): Promise<SSHConfig>;
21
25
  establishConnection(options: RemoteSSHConnectionProviderOptions): Promise<string>;
22
- establishSSHConnection(host: string, user: string): Promise<RemoteSSHConnection>;
26
+ establishSSHConnection(host: string, user: string, customConfigFile?: string): Promise<RemoteSSHConnection>;
23
27
  /**
24
28
  * Sometimes, ssh2.exec will not execute and retrieve any data right after the `ready` event fired.
25
29
  * In this method, we just perform `echo hello` in a loop to ensure that the connection is really ready.
@@ -1 +1 @@
1
- {"version":3,"file":"remote-ssh-connection-provider.d.ts","sourceRoot":"","sources":["../../../src/electron-node/ssh/remote-ssh-connection-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-ssh-connection-provider.d.ts","sourceRoot":"","sources":["../../../src/electron-node/ssh/remote-ssh-connection-provider.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ const tslib_1 = require("tslib");
20
20
  const ssh2 = require("ssh2");
21
21
  const fs = require("@theia/core/shared/fs-extra");
22
22
  const SftpClient = require("ssh2-sftp-client");
23
+ const SshConfig = require("ssh-config");
23
24
  const core_1 = require("@theia/core");
24
25
  const inversify_1 = require("@theia/core/shared/inversify");
25
26
  const remote_connection_service_1 = require("../remote-connection-service");
@@ -28,11 +29,47 @@ const promise_util_1 = require("@theia/core/lib/common/promise-util");
28
29
  const ssh_identity_file_collector_1 = require("./ssh-identity-file-collector");
29
30
  const remote_setup_service_1 = require("../setup/remote-setup-service");
30
31
  const uuid_1 = require("@theia/core/lib/common/uuid");
32
+ const env_variables_1 = require("@theia/core/lib/common/env-variables");
31
33
  let RemoteSSHConnectionProviderImpl = class RemoteSSHConnectionProviderImpl {
32
34
  constructor() {
33
35
  this.passwordRetryCount = 3;
34
36
  this.passphraseRetryCount = 3;
35
37
  }
38
+ async matchSSHConfigHost(host, user, customConfigFile) {
39
+ const sshConfig = await this.getSSHConfig(customConfigFile);
40
+ const host2 = host.trim().split(':');
41
+ const record = Object.fromEntries(Object.entries(sshConfig.compute(host2[0])).map(([k, v]) => [k.toLowerCase(), v]));
42
+ // Generate a regexp to find wildcards and process the hostname with the wildcards
43
+ if (record.host) {
44
+ const checkHost = new RegExp('^' + record.host
45
+ .replace(/([^\w\*\?])/g, '\\$1')
46
+ .replace(/([\?]+)/g, (...m) => '(' + '.'.repeat(m[1].length) + ')')
47
+ .replace(/\*/g, '(.+)') + '$');
48
+ const match = host2[0].match(checkHost);
49
+ if (match) {
50
+ if (record.hostname) {
51
+ record.hostname = record.hostname.replace('%h', match[1]);
52
+ }
53
+ }
54
+ if (host2[1]) {
55
+ record.port = host2[1];
56
+ }
57
+ }
58
+ return record;
59
+ }
60
+ async getSSHConfig(customConfigFile) {
61
+ const reg = /\$\{env:(.+?)\}/;
62
+ const promises = [];
63
+ customConfigFile === null || customConfigFile === void 0 ? void 0 : customConfigFile.replace(reg, (...m) => {
64
+ promises.push(this.envVariablesServer.getValue(m[1]));
65
+ return m[0];
66
+ });
67
+ const repVal = await Promise.all(promises);
68
+ const sshConfigFilePath = customConfigFile.replace(reg, () => { var _a; return ((_a = repVal.shift()) === null || _a === void 0 ? void 0 : _a.value) || ''; });
69
+ const buff = await fs.promises.readFile(sshConfigFilePath);
70
+ const sshConfig = SshConfig.parse(buff.toString());
71
+ return sshConfig;
72
+ }
36
73
  async establishConnection(options) {
37
74
  const progress = await this.messageService.showProgress({
38
75
  text: 'Remote SSH'
@@ -40,7 +77,7 @@ let RemoteSSHConnectionProviderImpl = class RemoteSSHConnectionProviderImpl {
40
77
  const report = message => progress.report({ message });
41
78
  report('Connecting to remote system...');
42
79
  try {
43
- const remote = await this.establishSSHConnection(options.host, options.user);
80
+ const remote = await this.establishSSHConnection(options.host, options.user, options.customConfigFile);
44
81
  await this.remoteSetup.setup({
45
82
  connection: remote,
46
83
  report,
@@ -62,10 +99,26 @@ let RemoteSSHConnectionProviderImpl = class RemoteSSHConnectionProviderImpl {
62
99
  progress.cancel();
63
100
  }
64
101
  }
65
- async establishSSHConnection(host, user) {
102
+ async establishSSHConnection(host, user, customConfigFile) {
66
103
  const deferred = new promise_util_1.Deferred();
67
104
  const sshClient = new ssh2.Client();
68
- const identityFiles = await this.identityFileCollector.gatherIdentityFiles();
105
+ const sshHostConfig = await this.matchSSHConfigHost(host, user, customConfigFile);
106
+ const identityFiles = await this.identityFileCollector.gatherIdentityFiles(undefined, sshHostConfig === null || sshHostConfig === void 0 ? void 0 : sshHostConfig.identityfile);
107
+ let algorithms = undefined;
108
+ if (sshHostConfig) {
109
+ if (!user && sshHostConfig.user) {
110
+ user = sshHostConfig.user;
111
+ }
112
+ if (sshHostConfig.hostname) {
113
+ host = sshHostConfig.hostname + ':' + (sshHostConfig.port || '22');
114
+ }
115
+ else if (sshHostConfig.port) {
116
+ host = sshHostConfig.host + ':' + (sshHostConfig.port || '22');
117
+ }
118
+ if (sshHostConfig.compression && sshHostConfig.compression.toLowerCase() === 'yes') {
119
+ algorithms = { compress: ['zlib@openssh.com', 'zlib'] };
120
+ }
121
+ }
69
122
  const hostUrl = new URL(`ssh://${host}`);
70
123
  const sshAuthHandler = this.getAuthHandler(user, hostUrl.hostname, identityFiles);
71
124
  sshClient
@@ -91,6 +144,7 @@ let RemoteSSHConnectionProviderImpl = class RemoteSSHConnectionProviderImpl {
91
144
  host: hostUrl.hostname,
92
145
  port: hostUrl.port ? parseInt(hostUrl.port, 10) : undefined,
93
146
  username: user,
147
+ algorithms: algorithms,
94
148
  authHandler: (methodsLeft, successes, callback) => (sshAuthHandler(methodsLeft, successes, callback), undefined)
95
149
  });
96
150
  return deferred.promise;
@@ -230,6 +284,10 @@ tslib_1.__decorate([
230
284
  (0, inversify_1.inject)(core_1.MessageService),
231
285
  tslib_1.__metadata("design:type", core_1.MessageService)
232
286
  ], RemoteSSHConnectionProviderImpl.prototype, "messageService", void 0);
287
+ tslib_1.__decorate([
288
+ (0, inversify_1.inject)(env_variables_1.EnvVariablesServer),
289
+ tslib_1.__metadata("design:type", Object)
290
+ ], RemoteSSHConnectionProviderImpl.prototype, "envVariablesServer", void 0);
233
291
  exports.RemoteSSHConnectionProviderImpl = RemoteSSHConnectionProviderImpl = tslib_1.__decorate([
234
292
  (0, inversify_1.injectable)()
235
293
  ], RemoteSSHConnectionProviderImpl);
@@ -1 +1 @@
1
- {"version":3,"file":"remote-ssh-connection-provider.js","sourceRoot":"","sources":["../../../src/electron-node/ssh/remote-ssh-connection-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"remote-ssh-connection-provider.js","sourceRoot":"","sources":["../../../src/electron-node/ssh/remote-ssh-connection-provider.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,6 @@ export interface SSHKey {
8
8
  }
9
9
  export declare class SSHIdentityFileCollector {
10
10
  protected getDefaultIdentityFiles(): string[];
11
- gatherIdentityFiles(sshAgentSock?: string): Promise<SSHKey[]>;
11
+ gatherIdentityFiles(sshAgentSock?: string, overrideIdentityFiles?: string[]): Promise<SSHKey[]>;
12
12
  }
13
13
  //# sourceMappingURL=ssh-identity-file-collector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssh-identity-file-collector.d.ts","sourceRoot":"","sources":["../../../src/electron-node/ssh/ssh-identity-file-collector.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAIjC,MAAM,WAAW,MAAM;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBACa,wBAAwB;IAEjC,SAAS,CAAC,uBAAuB,IAAI,MAAM,EAAE;IAqBvC,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAgFtE"}
1
+ {"version":3,"file":"ssh-identity-file-collector.d.ts","sourceRoot":"","sources":["../../../src/electron-node/ssh/ssh-identity-file-collector.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAIjC,MAAM,WAAW,MAAM;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBACa,wBAAwB;IAEjC,SAAS,CAAC,uBAAuB,IAAI,MAAM,EAAE;IAqBvC,mBAAmB,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAgFxG"}
@@ -43,8 +43,8 @@ let SSHIdentityFileCollector = class SSHIdentityFileCollector {
43
43
  PATH_SSH_CLIENT_ID_XMSS
44
44
  ];
45
45
  }
46
- async gatherIdentityFiles(sshAgentSock) {
47
- const identityFiles = this.getDefaultIdentityFiles();
46
+ async gatherIdentityFiles(sshAgentSock, overrideIdentityFiles) {
47
+ const identityFiles = overrideIdentityFiles || this.getDefaultIdentityFiles();
48
48
  const identityFileContentsResult = await Promise.allSettled(identityFiles.map(async (keyPath) => {
49
49
  keyPath = await fs.pathExists(keyPath + '.pub') ? keyPath + '.pub' : keyPath;
50
50
  return fs.promises.readFile(keyPath);
@@ -1 +1 @@
1
- {"version":3,"file":"ssh-identity-file-collector.js","sourceRoot":"","sources":["../../../src/electron-node/ssh/ssh-identity-file-collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssh-identity-file-collector.js","sourceRoot":"","sources":["../../../src/electron-node/ssh/ssh-identity-file-collector.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@theia/remote",
3
- "version": "1.61.0-next.8+436de3c45",
3
+ "version": "1.61.1",
4
4
  "description": "Theia - Remote",
5
5
  "dependencies": {
6
- "@theia/core": "1.61.0-next.8+436de3c45",
7
- "@theia/filesystem": "1.61.0-next.8+436de3c45",
8
- "@theia/userstorage": "1.61.0-next.8+436de3c45",
6
+ "@theia/core": "1.61.1",
7
+ "@theia/filesystem": "1.61.1",
8
+ "@theia/userstorage": "1.61.1",
9
9
  "archiver": "^5.3.1",
10
10
  "decompress": "^4.2.1",
11
11
  "decompress-tar": "^4.0.0",
@@ -15,6 +15,7 @@
15
15
  "glob": "^8.1.0",
16
16
  "socket.io": "^4.5.3",
17
17
  "socket.io-client": "^4.5.3",
18
+ "ssh-config": "^5.0.3",
18
19
  "ssh2": "^1.15.0",
19
20
  "ssh2-sftp-client": "^9.1.0",
20
21
  "tslib": "^2.6.2"
@@ -53,7 +54,7 @@
53
54
  "watch": "theiaext watch"
54
55
  },
55
56
  "devDependencies": {
56
- "@theia/ext-scripts": "1.60.0",
57
+ "@theia/ext-scripts": "1.61.1",
57
58
  "@types/archiver": "^5.3.2",
58
59
  "@types/decompress": "^4.2.4",
59
60
  "@types/express-http-proxy": "^1.6.6",
@@ -64,5 +65,5 @@
64
65
  "nyc": {
65
66
  "extends": "../../configs/nyc.json"
66
67
  },
67
- "gitHead": "436de3c4571e0000fdcbbf2e94ddfc992f38ccb2"
68
+ "gitHead": "5ea3cf6111aded4ccf1d5ccaf67b04e6588a6dea"
68
69
  }
@@ -14,6 +14,7 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
+ import { OS } from '@theia/core';
17
18
  import { interfaces } from '@theia/core/shared/inversify';
18
19
  import {
19
20
  PreferenceProxy,
@@ -41,11 +42,20 @@ export const RemotePreferenceSchema: PreferenceSchema = {
41
42
  'Controls the template used to download the node.js binaries for the remote backend. Points to the official node.js website by default. Uses multiple placeholders:'
42
43
  ) + '\n- ' + nodeDownloadTemplateParts.join('\n- ')
43
44
  },
45
+ 'remote.ssh.configFile': {
46
+ type: 'string',
47
+ default: OS.backend.isWindows ? '${env:USERPROFILE}\\.ssh\\config' : '${env:HOME}/.ssh/config',
48
+ markdownDescription: nls.localize(
49
+ 'theia/remote/ssh/configFile',
50
+ 'Remote SSH Config file'
51
+ )
52
+ },
44
53
  }
45
54
  };
46
55
 
47
56
  export interface RemoteConfiguration {
48
57
  'remote.nodeDownloadTemplate': string;
58
+ 'remote.ssh.configFile': string;
49
59
  }
50
60
 
51
61
  export const RemotePreferenceContribution = Symbol('RemotePreferenceContribution');
@@ -14,11 +14,12 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { Command, MessageService, nls, QuickInputService } from '@theia/core';
17
+ import { Command, MessageService, nls, QuickInputService, QuickPickInput } from '@theia/core';
18
18
  import { inject, injectable } from '@theia/core/shared/inversify';
19
19
  import { RemoteSSHConnectionProvider } from '../electron-common/remote-ssh-connection-provider';
20
20
  import { AbstractRemoteRegistryContribution, RemoteRegistry } from './remote-registry-contribution';
21
21
  import { RemotePreferences } from './remote-preferences';
22
+ import SSHConfig, { Directive } from 'ssh-config';
22
23
 
23
24
  export namespace RemoteSSHCommands {
24
25
  export const CONNECT: Command = Command.toLocalizedCommand({
@@ -31,6 +32,11 @@ export namespace RemoteSSHCommands {
31
32
  category: 'SSH',
32
33
  label: 'Connect Current Window to Host...',
33
34
  }, 'theia/remoteSSH/connect');
35
+ export const CONNECT_CURRENT_WINDOW_TO_CONFIG_HOST: Command = Command.toLocalizedCommand({
36
+ id: 'remote.ssh.connectToConfigHost',
37
+ category: 'SSH',
38
+ label: 'Connect Current Window to Host in Config File...',
39
+ }, 'theia/remoteSSH/connectToConfigHost');
34
40
  }
35
41
 
36
42
  @injectable()
@@ -55,6 +61,58 @@ export class RemoteSSHContribution extends AbstractRemoteRegistryContribution {
55
61
  registry.registerCommand(RemoteSSHCommands.CONNECT_CURRENT_WINDOW, {
56
62
  execute: () => this.connect(false)
57
63
  });
64
+ registry.registerCommand(RemoteSSHCommands.CONNECT_CURRENT_WINDOW_TO_CONFIG_HOST, {
65
+ execute: () => this.connectToConfigHost()
66
+ });
67
+ }
68
+
69
+ async getConfigFilePath(): Promise<string | undefined> {
70
+ return this.remotePreferences['remote.ssh.configFile'];
71
+ }
72
+
73
+ async connectToConfigHost(): Promise<void> {
74
+ const quickPicks: QuickPickInput[] = [];
75
+ const sshConfig = await this.sshConnectionProvider.getSSHConfig(await this.getConfigFilePath());
76
+
77
+ const wildcardCheck = /[\?\*\%]/;
78
+
79
+ for (const record of sshConfig) {
80
+ // check if its a section and if it has a single value
81
+ if (!('config' in record) || !(typeof record.value === 'string')) {
82
+ continue;
83
+ }
84
+ if (record.param.toLowerCase() === 'host' && !wildcardCheck.test(record.value)) {
85
+ const rec: Record<string, string | string[]> = ((record.config)
86
+ .filter((entry): entry is Directive => entry.type === SSHConfig.DIRECTIVE))
87
+ .reduce(
88
+ (pv, item) => ({ ...pv, [item.param.toLowerCase()]: item.value }), { 'host': record.value }
89
+ );
90
+ const host = (rec.hostname || rec.host) + ':' + (rec.port || '22');
91
+ const user = rec.user || 'root';
92
+
93
+ quickPicks.push({
94
+ label: <string>rec.host,
95
+ id: user + '@' + host
96
+ });
97
+
98
+ }
99
+
100
+ }
101
+
102
+ const selection = await this.quickInputService?.showQuickPick(quickPicks, {
103
+ placeholder: nls.localizeByDefault('Select an option to open a Remote Window')
104
+ });
105
+ if (selection && selection.id) {
106
+ try {
107
+ let [user, host] = selection.id!.split('@', 2);
108
+ host = selection.label;
109
+
110
+ const remotePort = await this.sendSSHConnect(host, user);
111
+ this.openRemote(remotePort, false);
112
+ } catch (err) {
113
+ this.messageService.error(`${nls.localize('theia/remote/sshFailure', 'Could not open SSH connection to remote.')} ${err.message ?? String(err)}`);
114
+ }
115
+ }
58
116
  }
59
117
 
60
118
  async connect(newWindow: boolean): Promise<void> {
@@ -73,6 +131,15 @@ export class RemoteSSHContribution extends AbstractRemoteRegistryContribution {
73
131
  user = split[0];
74
132
  host = split[1];
75
133
  }
134
+ if (!user) {
135
+ const configHost = await this.sshConnectionProvider.matchSSHConfigHost(host, undefined, await this.getConfigFilePath());
136
+
137
+ if (configHost) {
138
+ if (!user && configHost.user) {
139
+ user = <string>configHost.user;
140
+ }
141
+ }
142
+ }
76
143
  if (!user) {
77
144
  user = await this.quickInputService.input({
78
145
  title: nls.localize('theia/remote/enterUser', 'Enter SSH user name'),
@@ -96,7 +163,8 @@ export class RemoteSSHContribution extends AbstractRemoteRegistryContribution {
96
163
  return this.sshConnectionProvider.establishConnection({
97
164
  host,
98
165
  user,
99
- nodeDownloadTemplate: this.remotePreferences['remote.nodeDownloadTemplate']
166
+ nodeDownloadTemplate: this.remotePreferences['remote.nodeDownloadTemplate'],
167
+ customConfigFile: await this.getConfigFilePath()
100
168
  });
101
169
  }
102
170
  }
@@ -14,6 +14,8 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
+ import * as SshConfig from 'ssh-config';
18
+
17
19
  export const RemoteSSHConnectionProviderPath = '/remote/ssh';
18
20
 
19
21
  export const RemoteSSHConnectionProvider = Symbol('RemoteSSHConnectionProvider');
@@ -22,8 +24,15 @@ export interface RemoteSSHConnectionProviderOptions {
22
24
  user: string;
23
25
  host: string;
24
26
  nodeDownloadTemplate?: string;
27
+ customConfigFile?: string;
28
+ }
29
+
30
+ export interface SSHConfig extends Array<SshConfig.Line> {
31
+ compute(opts: string | SshConfig.MatchOptions): Record<string, string | string[]>;
25
32
  }
26
33
 
27
34
  export interface RemoteSSHConnectionProvider {
28
35
  establishConnection(options: RemoteSSHConnectionProviderOptions): Promise<string>;
36
+ getSSHConfig(customConfigFile?: string): Promise<SSHConfig>;
37
+ matchSSHConfigHost(host: string, user?: string, customConfigFile?: string): Promise<Record<string, string | string[]> | undefined>;
29
38
  }
@@ -18,9 +18,10 @@ import * as ssh2 from 'ssh2';
18
18
  import * as net from 'net';
19
19
  import * as fs from '@theia/core/shared/fs-extra';
20
20
  import SftpClient = require('ssh2-sftp-client');
21
+ import * as SshConfig from 'ssh-config';
21
22
  import { Emitter, Event, MessageService, QuickInputService } from '@theia/core';
22
23
  import { inject, injectable } from '@theia/core/shared/inversify';
23
- import { RemoteSSHConnectionProvider, RemoteSSHConnectionProviderOptions } from '../../electron-common/remote-ssh-connection-provider';
24
+ import { RemoteSSHConnectionProvider, RemoteSSHConnectionProviderOptions, SSHConfig } from '../../electron-common/remote-ssh-connection-provider';
24
25
  import { RemoteConnectionService } from '../remote-connection-service';
25
26
  import { RemoteProxyServerProvider } from '../remote-proxy-server-provider';
26
27
  import { RemoteConnection, RemoteExecOptions, RemoteExecResult, RemoteExecTester, RemoteStatusReport } from '../remote-types';
@@ -28,6 +29,7 @@ import { Deferred, timeout } from '@theia/core/lib/common/promise-util';
28
29
  import { SSHIdentityFileCollector, SSHKey } from './ssh-identity-file-collector';
29
30
  import { RemoteSetupService } from '../setup/remote-setup-service';
30
31
  import { generateUuid } from '@theia/core/lib/common/uuid';
32
+ import { EnvVariablesServer, EnvVariable } from '@theia/core/lib/common/env-variables';
31
33
 
32
34
  @injectable()
33
35
  export class RemoteSSHConnectionProviderImpl implements RemoteSSHConnectionProvider {
@@ -50,9 +52,60 @@ export class RemoteSSHConnectionProviderImpl implements RemoteSSHConnectionProvi
50
52
  @inject(MessageService)
51
53
  protected readonly messageService: MessageService;
52
54
 
55
+ @inject(EnvVariablesServer)
56
+ protected readonly envVariablesServer: EnvVariablesServer;
57
+
53
58
  protected passwordRetryCount = 3;
54
59
  protected passphraseRetryCount = 3;
55
60
 
61
+ async matchSSHConfigHost(host: string, user?: string, customConfigFile?: string): Promise<Record<string, string | string[]> | undefined> {
62
+ const sshConfig = await this.getSSHConfig(customConfigFile);
63
+ const host2 = host.trim().split(':');
64
+
65
+ const record = Object.fromEntries(
66
+ Object.entries(sshConfig.compute(host2[0])).map(([k, v]) => [k.toLowerCase(), v])
67
+ );
68
+
69
+ // Generate a regexp to find wildcards and process the hostname with the wildcards
70
+ if (record.host) {
71
+ const checkHost = new RegExp('^' + (<string>record.host)
72
+ .replace(/([^\w\*\?])/g, '\\$1')
73
+ .replace(/([\?]+)/g, (...m) => '(' + '.'.repeat(m[1].length) + ')')
74
+ .replace(/\*/g, '(.+)') + '$');
75
+
76
+ const match = host2[0].match(checkHost);
77
+ if (match) {
78
+ if (record.hostname) {
79
+ record.hostname = (<string>record.hostname).replace('%h', match[1]);
80
+ }
81
+ }
82
+
83
+ if (host2[1]) {
84
+ record.port = host2[1];
85
+ }
86
+ }
87
+
88
+ return record;
89
+ }
90
+
91
+ async getSSHConfig(customConfigFile?: string): Promise<SSHConfig> {
92
+ const reg = /\$\{env:(.+?)\}/;
93
+ const promises: Promise<EnvVariable | undefined>[] = [];
94
+ customConfigFile?.replace(reg, (...m) => {
95
+ promises.push(this.envVariablesServer.getValue(m[1]));
96
+ return m[0];
97
+ });
98
+
99
+ const repVal = await Promise.all(promises);
100
+ const sshConfigFilePath = customConfigFile!.replace(reg, () => repVal.shift()?.value || '');
101
+
102
+ const buff: Buffer = await fs.promises.readFile(sshConfigFilePath);
103
+
104
+ const sshConfig = SshConfig.parse(buff.toString());
105
+
106
+ return sshConfig;
107
+ }
108
+
56
109
  async establishConnection(options: RemoteSSHConnectionProviderOptions): Promise<string> {
57
110
  const progress = await this.messageService.showProgress({
58
111
  text: 'Remote SSH'
@@ -60,7 +113,7 @@ export class RemoteSSHConnectionProviderImpl implements RemoteSSHConnectionProvi
60
113
  const report: RemoteStatusReport = message => progress.report({ message });
61
114
  report('Connecting to remote system...');
62
115
  try {
63
- const remote = await this.establishSSHConnection(options.host, options.user);
116
+ const remote = await this.establishSSHConnection(options.host, options.user, options.customConfigFile);
64
117
  await this.remoteSetup.setup({
65
118
  connection: remote,
66
119
  report,
@@ -82,10 +135,26 @@ export class RemoteSSHConnectionProviderImpl implements RemoteSSHConnectionProvi
82
135
  }
83
136
  }
84
137
 
85
- async establishSSHConnection(host: string, user: string): Promise<RemoteSSHConnection> {
138
+ async establishSSHConnection(host: string, user: string, customConfigFile?: string): Promise<RemoteSSHConnection> {
86
139
  const deferred = new Deferred<RemoteSSHConnection>();
87
140
  const sshClient = new ssh2.Client();
88
- const identityFiles = await this.identityFileCollector.gatherIdentityFiles();
141
+ const sshHostConfig = await this.matchSSHConfigHost(host, user, customConfigFile);
142
+ const identityFiles = await this.identityFileCollector.gatherIdentityFiles(undefined, <string[]>sshHostConfig?.identityfile);
143
+
144
+ let algorithms: ssh2.Algorithms | undefined = undefined;
145
+ if (sshHostConfig) {
146
+ if (!user && sshHostConfig.user) {
147
+ user = <string>sshHostConfig.user;
148
+ }
149
+ if (sshHostConfig.hostname) {
150
+ host = sshHostConfig.hostname + ':' + (sshHostConfig.port || '22');
151
+ } else if (sshHostConfig.port) {
152
+ host = sshHostConfig.host + ':' + (sshHostConfig.port || '22');
153
+ }
154
+ if (sshHostConfig.compression && (<string>sshHostConfig.compression).toLowerCase() === 'yes') {
155
+ algorithms = { compress: ['zlib@openssh.com', 'zlib'] };
156
+ }
157
+ }
89
158
  const hostUrl = new URL(`ssh://${host}`);
90
159
  const sshAuthHandler = this.getAuthHandler(user, hostUrl.hostname, identityFiles);
91
160
  sshClient
@@ -110,6 +179,7 @@ export class RemoteSSHConnectionProviderImpl implements RemoteSSHConnectionProvi
110
179
  host: hostUrl.hostname,
111
180
  port: hostUrl.port ? parseInt(hostUrl.port, 10) : undefined,
112
181
  username: user,
182
+ algorithms: algorithms,
113
183
  authHandler: (methodsLeft, successes, callback) => (sshAuthHandler(methodsLeft, successes, callback), undefined)
114
184
  });
115
185
  return deferred.promise;
@@ -54,8 +54,8 @@ export class SSHIdentityFileCollector {
54
54
  ];
55
55
  }
56
56
 
57
- async gatherIdentityFiles(sshAgentSock?: string): Promise<SSHKey[]> {
58
- const identityFiles = this.getDefaultIdentityFiles();
57
+ async gatherIdentityFiles(sshAgentSock?: string, overrideIdentityFiles?: string[]): Promise<SSHKey[]> {
58
+ const identityFiles = overrideIdentityFiles || this.getDefaultIdentityFiles();
59
59
 
60
60
  const identityFileContentsResult = await Promise.allSettled(identityFiles.map(async keyPath => {
61
61
  keyPath = await fs.pathExists(keyPath + '.pub') ? keyPath + '.pub' : keyPath;