Saltar al contenido

Conexión al servidor SSH remoto (a través de la consola Node.js / html5)

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:

  1. npm install ssh2 xterm socket.io
  2. Crear index.html:

  
    SSH Terminal
    
    
    
    
    
    
  
  
    
  1. 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);
  1. Edite la configuración del servidor SSH pasada a .connect() en server.js
  2. node server.js
  3. 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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *