Crude server-side private key support
This commit is contained in:
parent
cfc2fff799
commit
11623f6816
4 changed files with 16 additions and 7 deletions
|
|
@ -5,7 +5,8 @@
|
||||||
},
|
},
|
||||||
"user": {
|
"user": {
|
||||||
"name": null,
|
"name": null,
|
||||||
"password": null
|
"password": null,
|
||||||
|
"privatekey": null
|
||||||
},
|
},
|
||||||
"ssh": {
|
"ssh": {
|
||||||
"host": null,
|
"host": null,
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,9 @@ 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)
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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 +
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue