Verificamos completamente cada enunciado en nuestro espacio con la meta de mostrarte en todo momento la información con la mayor veracidad y actualizada.
Solución:
Esto se puede hacer fácilmente con módulos como ssh2
, xterm
, y socket.io
.
He aquí un ejemplo:
npm install ssh2 xterm socket.io
- Crear
index.html
:
SSH Terminal
- Crear
server.js
:
var fs = require('fs');
var path = require('path');
var server = require('http').createServer(onRequest);
var io = require('socket.io')(server);
var SSHClient = require('ssh2').Client;
// Load static files into memory
var staticFiles = ;
var basePath = path.join(require.resolve('xterm'), '..');
[ 'addons/fit/fit.js',
'src/xterm.css',
'src/xterm.js'
].forEach(function(f)
staticFiles['/' + f] = fs.readFileSync(path.join(basePath, f));
);
staticFiles['/'] = fs.readFileSync('index.html');
// Handle static file serving
function onRequest(req, res)
var 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', function(socket)
var conn = new SSHClient();
conn.on('ready', function()
socket.emit('data', 'rn*** SSH CONNECTION ESTABLISHED ***rn');
conn.shell(function(err, stream)
if (err)
return socket.emit('data', 'rn*** SSH SHELL ERROR: ' + err.message + ' ***rn');
socket.on('data', function(data)
stream.write(data);
);
stream.on('data', function(d)
socket.emit('data', d.toString('binary'));
).on('close', function()
conn.end();
);
);
).on('close', function()
socket.emit('data', 'rn*** SSH CONNECTION CLOSED ***rn');
).on('error', function(err)
socket.emit('data', 'rn*** SSH CONNECTION ERROR: ' + err.message + ' ***rn');
).connect(
host: '192.168.100.105',
username: 'foo',
password: 'barbaz'
);
);
server.listen(8000);
- Edite la configuración del servidor SSH pasada a
.connect()
enserver.js
node server.js
- Visite http: // localhost: 8000 en su navegador
Solo agregando código actualizado para @mscdex gran respuesta porque las bibliotecas han cambiado a lo largo de los años.
Bibliotecas:
npm install express socket.io ssh2 xterm xterm-addon-fit
index.html:
SSH Terminal
WebSSH
server.js:
var fs = require('fs');
var path = require('path');
var server = require('http').createServer(onRequest);
var io = require('socket.io')(server);
var SSHClient = require('ssh2').Client;
// Load static files into memory
var staticFiles = ;
var 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');
// Handle static file serving
function onRequest(req, res)
var 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', function(socket)
var conn = new SSHClient();
conn.on('ready', function()
socket.emit('data', 'rn*** SSH CONNECTION ESTABLISHED ***rn');
conn.shell(function(err, stream)
if (err)
return socket.emit('data', 'rn*** SSH SHELL ERROR: ' + err.message + ' ***rn');
socket.on('data', function(data)
stream.write(data);
);
stream.on('data', function(d)
socket.emit('data', d.toString('binary'));
).on('close', function()
conn.end();
);
);
).on('close', function()
socket.emit('data', 'rn*** SSH CONNECTION CLOSED ***rn');
).on('error', function(err)
socket.emit('data', 'rn*** SSH CONNECTION ERROR: ' + err.message + ' ***rn');
).connect(
host: 'domain.tld',
port: 22,
username: 'root',
privateKey: require('fs').readFileSync('path/to/keyfile')
);
);
let port = 8000;
console.log('Listening on port', port)
server.listen(port);
Si eres capaz, puedes dejar una reseña acerca de qué le añadirías a este enunciado.
¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)