Browse Source

Added Functionality to Autologin with Username and Password

pull/122/head
Koushik M L N 7 years ago
parent
commit
a4f4db8594
  1. 1
      .gitignore
  2. 7
      cli.mjs
  3. 27
      wetty.mjs

1
.gitignore

@ -13,5 +13,6 @@ logs
results results
npm-debug.log npm-debug.log
.idea
node_modules/* node_modules/*
.esm-cache .esm-cache

7
cli.mjs

@ -25,6 +25,10 @@ const opts = optimist
demand : false, demand : false,
description: 'ssh user', description: 'ssh user',
}, },
sshpass: {
demand : false,
description: 'ssh password',
},
sshauth: { sshauth: {
demand : false, demand : false,
description: 'defaults to "password", you can use "publickey,password" instead', description: 'defaults to "password", you can use "publickey,password" instead',
@ -52,6 +56,7 @@ if (opts.help) {
} }
const sshuser = opts.sshuser || process.env.SSHUSER || ''; const sshuser = opts.sshuser || process.env.SSHUSER || '';
const sshpass = opts.sshpass || process.env.SSHPASS || '';
const sshhost = opts.sshhost || process.env.SSHHOST || 'localhost'; const sshhost = opts.sshhost || process.env.SSHHOST || 'localhost';
const sshauth = opts.sshauth || process.env.SSHAUTH || 'password,keyboard-interactive'; const sshauth = opts.sshauth || process.env.SSHAUTH || 'password,keyboard-interactive';
const sshport = opts.sshport || process.env.SSHPORT || 22; const sshport = opts.sshport || process.env.SSHPORT || 22;
@ -81,7 +86,7 @@ process.on('uncaughtException', err => {
console.error(`Error: ${err}`); console.error(`Error: ${err}`);
}); });
const tty = wetty(port, sshuser, sshhost, sshport, sshauth, sshkey, opts.ssl); const tty = wetty(port, sshuser, sshpass, sshhost, sshport, sshauth, sshkey, opts.ssl);
tty.on('exit', code => { tty.on('exit', code => {
console.log(`exit with code: ${code}`); console.log(`exit with code: ${code}`);
}); });

27
wetty.mjs

@ -6,6 +6,7 @@ import server from 'socket.io';
import { spawn } from 'node-pty'; import { spawn } from 'node-pty';
import EventEmitter from 'events'; import EventEmitter from 'events';
import favicon from 'serve-favicon'; import favicon from 'serve-favicon';
import url from 'url';
const app = express(); const app = express();
app.use(favicon(`${__dirname}/public/favicon.ico`)); app.use(favicon(`${__dirname}/public/favicon.ico`));
@ -36,12 +37,24 @@ function createServer(port, sslopts) {
}); });
} }
function getCommand(socket, sshuser, sshhost, sshport, sshauth, sshkey) { function getCommand(socket, sshuser, sshpass, sshhost, sshport, sshauth, sshkey) {
const { request } = socket; const { request } = socket;
const match = request.headers.referer.match('.+/ssh/.+$'); const match = request.headers.referer.match('.+/ssh/.+$');
console.log("Match ", match);
console.log("user ", sshuser);
const sshAddress = sshuser ? `${sshuser}@${sshhost}` : sshhost; const sshAddress = sshuser ? `${sshuser}@${sshhost}` : sshhost;
const sshPath = sshuser || match ? 'ssh' : path.join(__dirname, 'bin/ssh'); console.log("Address ", sshAddress);
const ssh = match ? `${match[0].split('/ssh/').pop()}@${sshhost}` : sshAddress; const referer = url.parse(request.headers.referer, true);
sshpass = referer.query.sshpass ? referer.query.sshpass : sshpass;
console.log("PASS ", sshpass);
let sshPath = ''
if (!sshpass)
sshPath = sshuser || match ? 'ssh' : path.join(__dirname, 'bin/ssh');
else
sshPath = ['sshpass', '-p', sshpass].join(' ');
console.log("PATH ", sshPath);
const ssh = match ? `${match[0].split('/ssh/').pop().split('?')[0]}@${sshhost}` : sshAddress;
console.log("SSH ", ssh);
const sshRemoteOptsBase = [ const sshRemoteOptsBase = [
sshPath, sshPath,
ssh, ssh,
@ -52,7 +65,7 @@ function getCommand(socket, sshuser, sshhost, sshport, sshauth, sshkey) {
] ]
const sshRemoteOpts = sshkey ? sshRemoteOptsBase.concat(['-i', sshkey]) const sshRemoteOpts = sshkey ? sshRemoteOptsBase.concat(['-i', sshkey])
: sshRemoteOptsBase : sshRemoteOptsBase
console.log(sshRemoteOpts);
return [ return [
process.getuid() === 0 && sshhost === 'localhost' process.getuid() === 0 && sshhost === 'localhost'
? ['login', '-h', socket.client.conn.remoteAddress.split(':')[3]] ? ['login', '-h', socket.client.conn.remoteAddress.split(':')[3]]
@ -62,12 +75,14 @@ function getCommand(socket, sshuser, sshhost, sshport, sshauth, sshkey) {
]; ];
} }
export default function start(port, sshuser, sshhost, sshport, sshauth, sshkey, sslopts) { export default function start(port, sshuser, sshpass, sshhost, sshport, sshauth, sshkey, sslopts) {
console.log("START", port, sshuser, sshpass, sshhost, sshport, sshauth, sshkey, sslopts);
const events = new EventEmitter(); const events = new EventEmitter();
const io = server(createServer(port, sslopts), { path: '/wetty/socket.io' }); const io = server(createServer(port, sslopts), { path: '/wetty/socket.io' });
io.on('connection', socket => { io.on('connection', socket => {
console.log(`${new Date()} Connection accepted.`); console.log(`${new Date()} Connection accepted.`);
const [args, ssh] = getCommand(socket, sshuser, sshhost, sshport, sshauth, sshkey); const [args, ssh] = getCommand(socket, sshuser, sshpass, sshhost, sshport, sshauth, sshkey);
console.log("PIKA PIKA", args, ssh);
const term = spawn('/usr/bin/env', args, { const term = spawn('/usr/bin/env', args, {
name: 'xterm-256color', name: 'xterm-256color',
cols: 80, cols: 80,

Loading…
Cancel
Save