Created the ssh app

This commit is contained in:
Mathias Wagner 2023-06-04 04:40:01 +02:00
parent cfcfe6d5ca
commit dbc50326e2
Signed by: Mathias
GPG Key ID: B8DC354B0A1F5B44

43
server/handler/ssh.js Normal file
View File

@ -0,0 +1,43 @@
const {Client} = require("ssh2");
module.exports = (io, socket) => {
let session = new Client();
let shell = null;
socket.on("disconnect", () => {
if (shell !== null) shell.end();
session.end();
});
socket.on("login", (msg) => {
session.on("ready", () => {
socket.emit("login", {status: "success"});
session.shell((err, stream) => {
if (err) return socket.emit("login", {status: "failed", message: err.message});
shell = stream;
stream.on("close", () => {
socket.emit("command", {status: "disconnected"});
}).on("data", (data) => {
socket.emit("command", {status: "data", data: data.toString()});
}).stderr.on("data", (data) => {
socket.emit("command", {status: "stderr", data: data.toString()});
});
});
}).connect({
host: msg.host,
port: msg.port || 22,
username: msg.username || "root",
password: msg.password,
privateKey: msg.privateKey,
readyTimeout: 5000
}).on("error", (err) => {
socket.emit("login", {status: "failed", message: err.message});
});
});
socket.on("command", (msg) => {
if (shell === null) return socket.emit("command", {status: "failed", message: "Not connected"});
shell.write(msg);
});
}