Home

Awesome

Webshell Server

Terminal over HTTP and HTTPS. Outrageously inspired from the excellent Wetty - adapted to support web based authentication.

Not production ready.

Install

git clone https://github.com/maestrano/webshell-server
cd webshell-server
npm install

Run:

node app.js -p 3000

Configuration - Example accessing docker containers

Edit the config.js file in the project directory to specify how authentication should be handled and what shell command should be run at startup.

E.g.

var config = {};

// Session Configuration
config.session = {
  key: 'webshell',
  secret: 'a-session-secret-that-you-should-change',
};

// Uses passport under the hood
// Best option here is to make a REST API call to some authentication
// endpoint of your own
//
// Here we authorise user with login "foo" and password "bar"
config.authFn = function(req, username, password, cb) {
  if (username == "foo" && password == "bar" && req.body.resource_id) {
    return cb(null, { id: username, resource_id: req.body.resource_id });
  } else {
    return cb(null, false, { message: 'Invalid credentials' });
  }
}

// Which command to run upon user authentication
// Here we attach to a docker container
config.shellEntrypoint = function(req) {
  return {
    script: '/usr/local/bin/docker',
    args: ['exec', '-it', req.user.resource_id, '/bin/bash'],
  };
}

module.exports = config;

Run your application:

node app.js -p 3000

Login using foo/bar:
http://localhost:3000/login?rid=my-container-name-or-id

You should be inside your docker container.

Run webshell as a service daemon

Install webshell-server globally with -g option:

sudo npm install webshell-server -g
sudo cp /usr/local/lib/node_modules/webshell-server/bin/webshell-server.conf /etc/init
sudo start webshell-server

This will start webshell-server on port 9443.

Webshell configuration can be edited at /etc/webshell/config.js