| | const fs = require('fs'); |
| | const path = require('path'); |
| | const http = require('http'); |
| | const SSHClient = require('ssh2').Client; |
| | const socketIO = require('socket.io'); |
| |
|
| | |
| | const server = http.createServer(onRequest); |
| |
|
| | |
| | const io = socketIO(server); |
| |
|
| | |
| | let staticFiles = {}; |
| | let basePath = path.join(require.resolve('xterm'), '..'); |
| | staticFiles['/xterm.css'] = fs.readFileSync(path.join(basePath, '../css/xterm.css')); |
| | staticFiles['/xterm.js'] = fs.readFileSync(path.join(basePath, 'xterm.js')); |
| | basePath = path.join(require.resolve('xterm-addon-fit'), '..'); |
| | staticFiles['/xterm-addon-fit.js'] = fs.readFileSync(path.join(basePath, 'xterm-addon-fit.js')); |
| | staticFiles['/'] = fs.readFileSync('index.html'); |
| |
|
| | |
| | function onRequest(req, res) { |
| | let file; |
| | if (req.method === 'GET' && (file = staticFiles[req.url])) { |
| | res.writeHead(200, { |
| | 'Content-Type': 'text/' + (/css$/.test(req.url) ? 'css' : (/js$/.test(req.url) ? 'javascript' : 'html')) |
| | }); |
| | return res.end(file); |
| | } |
| | res.writeHead(404); |
| | res.end(); |
| | } |
| |
|
| | |
| | io.on('connection', (socket) => { |
| | const conn = new SSHClient(); |
| |
|
| | |
| | conn.on('debug', (msg) => { |
| | console.log('DEBUG:', msg); |
| | }); |
| |
|
| | |
| | conn.on('ready', () => { |
| | socket.emit('data', '\r\n*** SSH CONNECTION ESTABLISHED ***\r\n'); |
| |
|
| | |
| | conn.shell((err, stream) => { |
| | if (err) { |
| | return socket.emit('data', '\r\n*** SSH SHELL ERROR: ' + err.message + ' ***\r\n'); |
| | } |
| |
|
| | |
| | socket.on('data', (data) => { |
| | stream.write(data); |
| | }); |
| |
|
| | |
| | stream.on('data', (d) => { |
| | socket.emit('data', d.toString('binary')); |
| | }).on('close', () => { |
| | conn.end(); |
| | }); |
| | }); |
| | }) |
| | .on('close', () => { |
| | socket.emit('data', '\r\n*** SSH CONNECTION CLOSED ***\r\n'); |
| | }) |
| | .on('error', (err) => { |
| | console.error('SSH Connection Error:', err); |
| | socket.emit('data', '\r\n*** SSH CONNECTION ERROR: ' + err.message + ' ***\r\n'); |
| | }) |
| | .connect({ |
| | host: process.env.REMOTE_HOST, |
| | port: 22, |
| | username: process.env.REMOTE_USERNAME, |
| | password: process.env.REMOTE_PASSWORD, |
| | readyTimeout: 60000, |
| | debug: (msg) => console.log('DEBUG:', msg) |
| | }); |
| | }); |
| |
|
| | |
| | const port = 8000; |
| | console.log('Listening on port', port); |
| | server.listen(port); |
| |
|