-
Notifications
You must be signed in to change notification settings - Fork 0
/
Terminal.js
91 lines (81 loc) · 2.45 KB
/
Terminal.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
const express = require("express");
// For future use of Terminal Data from the database
const app = express();
const { io } = require("./server");
const dotEnv = require("dotenv");
dotEnv.config();
// The Below is the Configuration for the Terminal
var sshConfig = {
host: process.env.SSH_HOST,
username: process.env.SSH_USERNAME,
password: process.env.SSH_PASSWORD,
port: process.env.SSH_PORT,
};
var SSHClient = require("ssh2").Client;
//Socket Connection
io.on("connection", function (socket) {
// Creating a new SSH Client
var ssh = new SSHClient();
// Connecting to the SSH Server
ssh
.on("ready", function () {
// socket.emit("data", "\r\n*** SSH CONNECTION ESTABLISHED ***\r\n");
// console.log("SSH CONNECTION ESTABLISHED");
connected = true;
// Executing the command with the SSH Client
ssh.shell(function (err, stream) {
if (err)
return socket.emit(
"data",
"\r\n*** SSH SHELL ERROR: " + err.message + " ***\r\n"
);
// Writing the data to the terminal
socket.on("data", function (data) {
stream.write(data);
});
// Reading the data from the terminal
stream
.on("data", function (d) {
// emitting the decoded data to the client
socket.emit("data", d.toString("utf-8"));
})
.on("close", function () {
ssh.end();
});
});
})
// Handling the error if any
.on("close", function () {
socket.emit("data", "\r\n*** SSH CONNECTION CLOSED ***\r\n");
})
.on("error", function (err) {
console.log(err);
// Sending the error to the client
socket.emit(
"data",
"\r\n*** SSH CONNECTION ERROR: " + err.message + " ***\r\n"
);
})
.connect(sshConfig);
});
module.exports = app;
// TEST CASE:
// function testSSH() {
// var conn = new SSHClient();
// conn.on("ready", function() {
// console.log("Client :: ready");
// conn.exec("ls", function(err, stream) {
// if (err) throw err;
// stream.on("close", function(code, signal) {
// console.log("Stream :: close code: " + code);
// conn.end();
// }).on("data", function(data) {
// console.log("STDOUT: " + data);
// }).stderr.on("data", function(data) {
// console.log("STDERR: " + data);
// });
// });
// }).connect(sshConfig);
// }
// test case example:
// testSSH();