Repository URL to install this package:
Version:
0.6.0 ▾
|
gateway-proxy
/
usr
/
share
/
gateway-proxy
/
app
/
node_modules
/
ssh2
/
test
/
test-userauth-agent-openssh.js
|
---|
'use strict';
const assert = require('assert');
const { spawnSync } = require('child_process');
const debug = false;
const SPAWN_OPTS = { windowsHide: true };
// TODO: figure out why this test is failing on Windows
if (process.platform === 'win32') {
console.log('Skipping ssh-agent test on Windows');
process.exit(0);
}
if (process.argv[2] === 'child') {
const {
fixtureKey,
mustCall,
setup,
} = require('./common.js');
const serverCfg = { hostKeys: [ fixtureKey('ssh_host_rsa_key').raw ] };
const clientKey = fixtureKey('openssh_new_rsa');
// Add key to the agent first
{
const {
error, status
} = spawnSync('ssh-add', [ clientKey.fullPath ], SPAWN_OPTS);
if (error || status !== 0) {
console.error('Failed to add key to agent');
process.exit(1);
}
}
const username = 'Agent User';
const { server } = setup(
'Agent authentication',
{
client: { username, agent: process.env.SSH_AUTH_SOCK },
server: serverCfg,
debug,
}
);
server.on('connection', mustCall((conn) => {
let authAttempt = 0;
conn.on('authentication', mustCall((ctx) => {
assert(ctx.username === username,
`Wrong username: ${ctx.username}`);
switch (++authAttempt) {
case 1:
assert(ctx.method === 'none', `Wrong auth method: ${ctx.method}`);
return ctx.reject();
case 3:
assert(ctx.signature, 'Missing publickey signature');
// FALLTHROUGH
case 2:
assert(ctx.method === 'publickey',
`Wrong auth method: ${ctx.method}`);
assert(ctx.key.algo === clientKey.key.type,
`Wrong key algo: ${ctx.key.algo}`);
assert.deepStrictEqual(clientKey.key.getPublicSSH(),
ctx.key.data,
'Public key mismatch');
break;
}
if (ctx.signature) {
assert(clientKey.key.verify(ctx.blob, ctx.signature) === true,
'Could not verify publickey signature');
}
ctx.accept();
}, 3)).on('ready', mustCall(() => {
conn.end();
}));
}));
} else {
{
const {
error, status
} = spawnSync('which', ['ssh-agent'], SPAWN_OPTS);
if (error || status !== 0) {
console.log('No ssh-agent available, skipping agent test ...');
process.exit(0);
}
}
{
const {
error, status
} = spawnSync('which', ['ssh-add'], SPAWN_OPTS);
if (error || status !== 0) {
console.log('No ssh-add available, skipping agent test ...');
process.exit(0);
}
}
const {
error, status
} = spawnSync('ssh-agent',
[ process.execPath, __filename, 'child' ],
{ ...SPAWN_OPTS, stdio: 'inherit' });
if (error || status !== 0)
throw new Error('Agent test failed');
}