hivessh
Version:
HiveSsh is an innovative library designed to streamline SSH2 connections and simplify task execution on Linux servers.
52 lines • 7.9 kB
JavaScript
import { Client as SshClient } from "ssh2";
export function createClient(settings) {
return new Promise((res, rej) => {
const hopClient = new SshClient();
hopClient.on("ready", () => res(hopClient));
hopClient.on("error", (err) => rej(err));
hopClient.connect({
...settings,
host: settings.sock ? undefined : settings.host,
port: settings.sock ? undefined : settings.port,
});
});
}
export function createForward(ssh, srcHost, srcPort, targetHost, targetPort) {
return new Promise((res, rej) => {
ssh.forwardOut(srcHost, srcPort, targetHost, targetPort, (err, stream) => {
if (err) {
ssh.end();
rej(err);
return;
}
res(stream);
});
});
}
export async function handleHops(settings, defaultSrcHost = "127.0.0.1", defaultSrcPort = 60022) {
const hops = settings.hops;
if (hops === undefined ||
hops.length == 0) {
return createClient(settings);
}
let lastHop = await createClient(hops[0]);
for (let i = 1; i < hops.length; i++) {
const nextSetting = hops[i];
const channel = await createForward(lastHop, defaultSrcHost, defaultSrcPort, nextSetting.host, nextSetting.port);
lastHop = await createClient({
...nextSetting,
host: undefined,
port: undefined,
sock: channel,
});
}
const channel = await createForward(lastHop, defaultSrcHost, defaultSrcPort, settings.host, settings.port);
const finalSshClient = await createClient({
...settings,
host: undefined,
port: undefined,
sock: channel,
});
return finalSshClient;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSG9zdEhvcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ib3N0SG9wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsTUFBTSxJQUFJLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcxRCxNQUFNLFVBQVUsWUFBWSxDQUN4QixRQUF5QjtJQUV6QixPQUFPLElBQUksT0FBTyxDQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUE7UUFFakMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7UUFDM0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBRXhDLFNBQVMsQ0FBQyxPQUFPLENBQUM7WUFDZCxHQUFHLFFBQVE7WUFDWCxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUMvQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSTtTQUNsRCxDQUFDLENBQUE7SUFDTixDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUN6QixHQUFjLEVBQ2QsT0FBZSxFQUNmLE9BQWUsRUFDZixVQUFrQixFQUNsQixVQUFrQjtJQUVsQixPQUFPLElBQUksT0FBTyxDQUFnQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUMzQyxHQUFHLENBQUMsVUFBVSxDQUNWLE9BQU8sRUFDUCxPQUFPLEVBQ1AsVUFBVSxFQUNWLFVBQVUsRUFDVixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNaLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ04sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBO2dCQUNULEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDUixPQUFNO1lBQ1YsQ0FBQztZQUVELEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNmLENBQUMsQ0FBQyxDQUFBO0lBQ1YsQ0FBQyxDQUFDLENBQUE7QUFDTixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQzVCLFFBQTZCLEVBQzdCLGlCQUF5QixXQUFXLEVBQ3BDLGlCQUF5QixLQUFLO0lBRTlCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUE7SUFDMUIsSUFDSSxJQUFJLEtBQUssU0FBUztRQUNsQixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFDbEIsQ0FBQztRQUNDLE9BQU8sWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFFRCxJQUFJLE9BQU8sR0FBYyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVwRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUUzQixNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FDL0IsT0FBTyxFQUNQLGNBQWMsRUFDZCxjQUFjLEVBQ2QsV0FBVyxDQUFDLElBQUksRUFDaEIsV0FBVyxDQUFDLElBQUksQ0FDbkIsQ0FBQTtRQUVELE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztZQUN6QixHQUFHLFdBQVc7WUFDZCxJQUFJLEVBQUUsU0FBZ0I7WUFDdEIsSUFBSSxFQUFFLFNBQWdCO1lBQ3RCLElBQUksRUFBRSxPQUFPO1NBQ2hCLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FDL0IsT0FBTyxFQUNQLGNBQWMsRUFDZCxjQUFjLEVBQ2QsUUFBUSxDQUFDLElBQUksRUFDYixRQUFRLENBQUMsSUFBSSxDQUNoQixDQUFBO0lBRUQsTUFBTSxjQUFjLEdBQUcsTUFBTSxZQUFZLENBQUM7UUFDdEMsR0FBRyxRQUFRO1FBQ1gsSUFBSSxFQUFFLFNBQWdCO1FBQ3RCLElBQUksRUFBRSxTQUFnQjtRQUN0QixJQUFJLEVBQUUsT0FBTztLQUNoQixDQUFDLENBQUE7SUFFRixPQUFPLGNBQWMsQ0FBQTtBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xpZW50Q2hhbm5lbCwgQ2xpZW50IGFzIFNzaENsaWVudCB9IGZyb20gXCJzc2gyXCI7XG5pbXBvcnQgeyBIb3BIb3N0U2V0dGluZ3MsIFNzaEhvc3RCYXNlU2V0dGluZ3MgfSBmcm9tIFwiLi9Tc2hIb3N0T3B0aW9ucy5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2xpZW50KFxuICAgIHNldHRpbmdzOiBIb3BIb3N0U2V0dGluZ3MsXG4pOiBQcm9taXNlPFNzaENsaWVudD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxTc2hDbGllbnQ+KChyZXMsIHJlaikgPT4ge1xuICAgICAgICBjb25zdCBob3BDbGllbnQgPSBuZXcgU3NoQ2xpZW50KClcblxuICAgICAgICBob3BDbGllbnQub24oXCJyZWFkeVwiLCAoKSA9PiByZXMoaG9wQ2xpZW50KSlcbiAgICAgICAgaG9wQ2xpZW50Lm9uKFwiZXJyb3JcIiwgKGVycikgPT4gcmVqKGVycikpXG5cbiAgICAgICAgaG9wQ2xpZW50LmNvbm5lY3Qoe1xuICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICBob3N0OiBzZXR0aW5ncy5zb2NrID8gdW5kZWZpbmVkIDogc2V0dGluZ3MuaG9zdCxcbiAgICAgICAgICAgIHBvcnQ6IHNldHRpbmdzLnNvY2sgPyB1bmRlZmluZWQgOiBzZXR0aW5ncy5wb3J0LFxuICAgICAgICB9KVxuICAgIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3J3YXJkKFxuICAgIHNzaDogU3NoQ2xpZW50LFxuICAgIHNyY0hvc3Q6IHN0cmluZyxcbiAgICBzcmNQb3J0OiBudW1iZXIsXG4gICAgdGFyZ2V0SG9zdDogc3RyaW5nLFxuICAgIHRhcmdldFBvcnQ6IG51bWJlcixcbik6IFByb21pc2U8Q2xpZW50Q2hhbm5lbD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxDbGllbnRDaGFubmVsPigocmVzLCByZWopID0+IHtcbiAgICAgICAgc3NoLmZvcndhcmRPdXQoXG4gICAgICAgICAgICBzcmNIb3N0LFxuICAgICAgICAgICAgc3JjUG9ydCxcbiAgICAgICAgICAgIHRhcmdldEhvc3QsXG4gICAgICAgICAgICB0YXJnZXRQb3J0LFxuICAgICAgICAgICAgKGVyciwgc3RyZWFtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzc2guZW5kKClcbiAgICAgICAgICAgICAgICAgICAgcmVqKGVycilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzKHN0cmVhbSlcbiAgICAgICAgICAgIH0pXG4gICAgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUhvcHMoXG4gICAgc2V0dGluZ3M6IFNzaEhvc3RCYXNlU2V0dGluZ3MsXG4gICAgZGVmYXVsdFNyY0hvc3Q6IHN0cmluZyA9IFwiMTI3LjAuMC4xXCIsXG4gICAgZGVmYXVsdFNyY1BvcnQ6IG51bWJlciA9IDYwMDIyLFxuKTogUHJvbWlzZTxTc2hDbGllbnQ+IHtcbiAgICBjb25zdCBob3BzID0gc2V0dGluZ3MuaG9wc1xuICAgIGlmIChcbiAgICAgICAgaG9wcyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIGhvcHMubGVuZ3RoID09IDBcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNsaWVudChzZXR0aW5ncylcbiAgICB9XG5cbiAgICBsZXQgbGFzdEhvcDogU3NoQ2xpZW50ID0gYXdhaXQgY3JlYXRlQ2xpZW50KGhvcHNbMF0pXG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IGhvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbmV4dFNldHRpbmcgPSBob3BzW2ldXG5cbiAgICAgICAgY29uc3QgY2hhbm5lbCA9IGF3YWl0IGNyZWF0ZUZvcndhcmQoXG4gICAgICAgICAgICBsYXN0SG9wLFxuICAgICAgICAgICAgZGVmYXVsdFNyY0hvc3QsXG4gICAgICAgICAgICBkZWZhdWx0U3JjUG9ydCxcbiAgICAgICAgICAgIG5leHRTZXR0aW5nLmhvc3QsXG4gICAgICAgICAgICBuZXh0U2V0dGluZy5wb3J0LFxuICAgICAgICApXG5cbiAgICAgICAgbGFzdEhvcCA9IGF3YWl0IGNyZWF0ZUNsaWVudCh7XG4gICAgICAgICAgICAuLi5uZXh0U2V0dGluZyxcbiAgICAgICAgICAgIGhvc3Q6IHVuZGVmaW5lZCBhcyBhbnksXG4gICAgICAgICAgICBwb3J0OiB1bmRlZmluZWQgYXMgYW55LFxuICAgICAgICAgICAgc29jazogY2hhbm5lbCxcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBjaGFubmVsID0gYXdhaXQgY3JlYXRlRm9yd2FyZChcbiAgICAgICAgbGFzdEhvcCxcbiAgICAgICAgZGVmYXVsdFNyY0hvc3QsXG4gICAgICAgIGRlZmF1bHRTcmNQb3J0LFxuICAgICAgICBzZXR0aW5ncy5ob3N0LFxuICAgICAgICBzZXR0aW5ncy5wb3J0LFxuICAgIClcblxuICAgIGNvbnN0IGZpbmFsU3NoQ2xpZW50ID0gYXdhaXQgY3JlYXRlQ2xpZW50KHtcbiAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgIGhvc3Q6IHVuZGVmaW5lZCBhcyBhbnksXG4gICAgICAgIHBvcnQ6IHVuZGVmaW5lZCBhcyBhbnksXG4gICAgICAgIHNvY2s6IGNoYW5uZWwsXG4gICAgfSlcblxuICAgIHJldHVybiBmaW5hbFNzaENsaWVudFxufSJdfQ==