@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.
- package/lib/electron-browser/remote-preferences.d.ts +1 -0
- package/lib/electron-browser/remote-preferences.d.ts.map +1 -1
- package/lib/electron-browser/remote-preferences.js +6 -0
- package/lib/electron-browser/remote-preferences.js.map +1 -1
- package/lib/electron-browser/remote-ssh-contribution.d.ts +3 -0
- package/lib/electron-browser/remote-ssh-contribution.d.ts.map +1 -1
- package/lib/electron-browser/remote-ssh-contribution.js +59 -1
- package/lib/electron-browser/remote-ssh-contribution.js.map +1 -1
- package/lib/electron-common/remote-ssh-connection-provider.d.ts +7 -0
- package/lib/electron-common/remote-ssh-connection-provider.d.ts.map +1 -1
- package/lib/electron-common/remote-ssh-connection-provider.js.map +1 -1
- package/lib/electron-node/ssh/remote-ssh-connection-provider.d.ts +6 -2
- package/lib/electron-node/ssh/remote-ssh-connection-provider.d.ts.map +1 -1
- package/lib/electron-node/ssh/remote-ssh-connection-provider.js +61 -3
- package/lib/electron-node/ssh/remote-ssh-connection-provider.js.map +1 -1
- package/lib/electron-node/ssh/ssh-identity-file-collector.d.ts +1 -1
- package/lib/electron-node/ssh/ssh-identity-file-collector.d.ts.map +1 -1
- package/lib/electron-node/ssh/ssh-identity-file-collector.js +2 -2
- package/lib/electron-node/ssh/ssh-identity-file-collector.js.map +1 -1
- package/package.json +7 -6
- package/src/electron-browser/remote-preferences.ts +10 -0
- package/src/electron-browser/remote-ssh-contribution.ts +70 -2
- package/src/electron-common/remote-ssh-connection-provider.ts +9 -0
- package/src/electron-node/ssh/remote-ssh-connection-provider.ts +74 -4
- 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":"
|
|
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;;;
|
|
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,
|
|
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":";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,
|
|
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;
|
|
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;;;
|
|
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":";AAgBA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAE3B,OAAO,UAAU,GAAG,QAAQ,kBAAkB,CAAC,CAAC;
|
|
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
|
|
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;
|
|
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":";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,kDAAkD;AAClD,yBAAyB;AACzB,6BAA6B;AAC7B,iCAAiC;AAEjC,6BAA6B;AAC7B,4DAA0D;AAWnD,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAEvB,uBAAuB;QAC7B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACrE,MAAM,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACzE,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACrE,MAAM,0BAA0B,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;QAC7E,MAAM,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QACvE,MAAM,2BAA2B,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QAC/E,MAAM,6BAA6B,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAEnF,OAAO;YACH,sBAAsB;YACtB,wBAAwB;YACxB,2BAA2B;YAC3B,0BAA0B;YAC1B,6BAA6B;YAC7B,sBAAsB;YACtB,uBAAuB;SAC1B,CAAC;IACN,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,YAAqB;
|
|
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.
|
|
3
|
+
"version": "1.61.1",
|
|
4
4
|
"description": "Theia - Remote",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/core": "1.61.
|
|
7
|
-
"@theia/filesystem": "1.61.
|
|
8
|
-
"@theia/userstorage": "1.61.
|
|
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.
|
|
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": "
|
|
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
|
|
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;
|