Crude server-side private key support

This commit is contained in:
Momtchil Momtchev 2018-11-26 22:32:35 +01:00
parent cfc2fff799
commit 11623f6816
4 changed files with 16 additions and 7 deletions

View file

@ -5,7 +5,8 @@
}, },
"user": { "user": {
"name": null, "name": null,
"password": null "password": null,
"privatekey": null
}, },
"ssh": { "ssh": {
"host": null, "host": null,

View file

@ -76,7 +76,10 @@ app.get('/ssh/host/:host?', function (req, res, next) {
}, },
readyTimeout: (validator.isInt(req.query.readyTimeout + '', { min: 1, max: 300000 }) && readyTimeout: (validator.isInt(req.query.readyTimeout + '', { min: 1, max: 300000 }) &&
req.query.readyTimeout) || config.ssh.readyTimeout req.query.readyTimeout) || config.ssh.readyTimeout
} }
if (config.user.privatekey !== null)
req.session.privatekey = require('fs').readFileSync(config.user.privatekey, 'ascii')
if (req.session.ssh.header.name) validator.escape(req.session.ssh.header.name) if (req.session.ssh.header.name) validator.escape(req.session.ssh.header.name)
if (req.session.ssh.header.background) validator.escape(req.session.ssh.header.background) if (req.session.ssh.header.background) validator.escape(req.session.ssh.header.background)
}) })

View file

@ -114,18 +114,19 @@ module.exports = function socket (socket) {
debugWebSSH2('conn.on(\'keyboard-interactive\')') debugWebSSH2('conn.on(\'keyboard-interactive\')')
finish([socket.request.session.userpassword]) finish([socket.request.session.userpassword])
}) })
if (socket.request.session.username && socket.request.session.userpassword && socket.request.session.ssh) { if (socket.request.session.username && (socket.request.session.userpassword || (socket.request.session.privatekey) && socket.request.session.ssh)) {
// console.log('hostkeys: ' + hostkeys[0].[0]) // console.log('hostkeys: ' + hostkeys[0].[0])
conn.connect({ conn.connect({
host: socket.request.session.ssh.host, host: socket.request.session.ssh.host,
port: socket.request.session.ssh.port, port: socket.request.session.ssh.port,
username: socket.request.session.username, username: socket.request.session.username,
password: socket.request.session.userpassword, password: socket.request.session.userpassword,
tryKeyboard: true, tryKeyboard: false,
algorithms: socket.request.session.ssh.algorithms, algorithms: socket.request.session.ssh.algorithms,
readyTimeout: socket.request.session.ssh.readyTimeout, readyTimeout: socket.request.session.ssh.readyTimeout,
keepaliveInterval: socket.request.session.ssh.keepaliveInterval, keepaliveInterval: socket.request.session.ssh.keepaliveInterval,
keepaliveCountMax: socket.request.session.ssh.keepaliveCountMax, keepaliveCountMax: socket.request.session.ssh.keepaliveCountMax,
privateKey: socket.request.session.privatekey,
debug: debug('ssh2') debug: debug('ssh2')
}) })
} else { } else {

View file

@ -1,6 +1,10 @@
'use strict' 'use strict'
/* jshint esversion: 6, asi: true, node: true */ /* jshint esversion: 6, asi: true, node: true */
// util.js // util.js
var path = require('path')
var nodeRoot = path.dirname(require.main.filename)
var configPath = path.join(nodeRoot, 'config.json')
var config = require('read-config')(configPath)
// private // private
require('colors') // allow for color property extensions in log messages require('colors') // allow for color property extensions in log messages
@ -9,7 +13,7 @@ var Auth = require('basic-auth')
exports.basicAuth = function basicAuth (req, res, next) { exports.basicAuth = function basicAuth (req, res, next) {
var myAuth = Auth(req) var myAuth = Auth(req)
if (myAuth && myAuth.pass !== '') { if (myAuth && (myAuth.pass !== '' || config.user.privatekey !== null)) {
req.session.username = myAuth.name req.session.username = myAuth.name
req.session.userpassword = myAuth.pass req.session.userpassword = myAuth.pass
debug('myAuth.name: ' + myAuth.name.yellow.bold.underline + debug('myAuth.name: ' + myAuth.name.yellow.bold.underline +