Terminal over HTTP and HTTPS. Outrageously inspired from the excellent Wetty - adapted to support web based authentication.
Not production ready.
git clone https://github.com/maestrano/webshell-server
cd webshell-server
npm install
node app.js -p 3000
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.
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