mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 14:16:01 +00:00
ssh tunnel WIP
This commit is contained in:
@@ -130,7 +130,7 @@ class SSHConnection {
|
||||
const connectionToBastion = await this.connect(bastionHost);
|
||||
return new Promise((resolve, reject) => {
|
||||
connectionToBastion.forwardOut(
|
||||
'127.0.0.1',
|
||||
this.options.bindHost,
|
||||
22,
|
||||
this.options.endHost,
|
||||
this.options.endPort || 22,
|
||||
@@ -228,9 +228,9 @@ class SSHConnection {
|
||||
options.toPort
|
||||
);
|
||||
connection.forwardOut(
|
||||
'127.0.0.1',
|
||||
this.options.bindHost,
|
||||
options.fromPort,
|
||||
options.toHost || '127.0.0.1',
|
||||
options.toHost || this.options.bindHost,
|
||||
options.toPort,
|
||||
(error, stream) => {
|
||||
if (error) {
|
||||
@@ -241,7 +241,7 @@ class SSHConnection {
|
||||
}
|
||||
);
|
||||
})
|
||||
.listen(options.fromPort, '127.0.0.1', () => {
|
||||
.listen(options.fromPort, this.options.bindHost, () => {
|
||||
return resolve();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -63,7 +63,7 @@ async function connectUtility(driver, storedConnection, connectionMode, addition
|
||||
throw new Error(tunnel.message);
|
||||
}
|
||||
|
||||
connection.server = 'localhost';
|
||||
connection.server = tunnel.localHost;
|
||||
connection.port = tunnel.localPort;
|
||||
}
|
||||
|
||||
|
||||
@@ -61,15 +61,20 @@ function callForwardProcess(connection, tunnelConfig, tunnelCacheKey) {
|
||||
}
|
||||
|
||||
async function getSshTunnel(connection) {
|
||||
const config = require('../controllers/config');
|
||||
|
||||
const tunnelCacheKey = stableStringify(_.pick(connection, TUNNEL_FIELDS));
|
||||
const globalSettings = await config.getSettings();
|
||||
|
||||
return await lock.acquire(tunnelCacheKey, async () => {
|
||||
if (sshTunnelCache[tunnelCacheKey]) return sshTunnelCache[tunnelCacheKey];
|
||||
const localPort = await portfinder.getPortPromise({ port: 10000, stopPort: 60000 });
|
||||
const localHost = globalSettings?.['connection.sshBindHost'] || '127.0.0.1';
|
||||
// workaround for `getPortPromise` not releasing the port quickly enough
|
||||
await new Promise(resolve => setTimeout(resolve, 500));
|
||||
const tunnelConfig = {
|
||||
fromPort: localPort,
|
||||
fromHost: localHost,
|
||||
toPort: connection.port,
|
||||
toHost: connection.server,
|
||||
};
|
||||
@@ -87,6 +92,7 @@ async function getSshTunnel(connection) {
|
||||
sshTunnelCache[tunnelCacheKey] = {
|
||||
state: 'ok',
|
||||
localPort,
|
||||
localHost,
|
||||
subprocess,
|
||||
};
|
||||
return sshTunnelCache[tunnelCacheKey];
|
||||
|
||||
Reference in New Issue
Block a user