Skip to content

Commit

Permalink
With openssh_authAgent & tests
Browse files Browse the repository at this point in the history
  • Loading branch information
François Leurent committed Jun 25, 2021
1 parent 27795a3 commit 40fa58f
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 2 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1180,6 +1180,9 @@ You can find more examples in the `examples` directory of this repository.

* **forwardOut**(< _string_ >boundAddr, < _integer_ >boundPort, < _string_ >remoteAddr, < _integer_ >remotePort, < _function_ >callback) - _(void)_ - Alert the client of an incoming TCP connection on `boundAddr` on port `boundPort` from `remoteAddr` on port `remotePort`. `callback` has 2 parameters: < _Error_ >err, < _Channel_ >stream.

* **openssh_authAgent**(< _function_ >callback) - _boolean_ - Alert the client of an incoming `ssh-agent` socket connection. `callback` has 2 parameters: < _Error_ >err, < _Channel_ >stream. Returns `false` if you should wait for the `continue` event before sending any more traffic.


* **openssh_forwardOutStreamLocal**(< _string_ >socketPath, < _function_ >callback) - _(void)_ - Alert the client of an incoming UNIX domain socket connection on `socketPath`. `callback` has 2 parameters: < _Error_ >err, < _Channel_ >stream.

* **rekey**([< _function_ >callback]) - _(void)_ - Initiates a rekey with the client. If `callback` is supplied, it is added as a one-time handler for the `rekey` event.
Expand Down
9 changes: 9 additions & 0 deletions lib/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -1284,6 +1284,12 @@ class Client extends EventEmitter {
return this;
}


openssh_authAgent(cb) {
openChannel(this, '[email protected]', cb);
return this;
}

openssh_forwardOutStreamLocal(socketPath, cb) {
const opts = { socketPath };
openChannel(this, '[email protected]', opts, cb);
Expand Down Expand Up @@ -1341,6 +1347,9 @@ function openChannel(self, type, opts, cb) {
case 'x11':
self._protocol.x11(localChan, initWindow, maxPacket, opts);
break;
case '[email protected]':
self._protocol.openssh_authAgent(localChan, initWindow, maxPacket);
break;
case '[email protected]':
self._protocol.openssh_forwardedStreamLocal(
localChan, initWindow, maxPacket, opts
Expand Down
31 changes: 29 additions & 2 deletions test/test-openssh.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

const assert = require('assert');
const { inspect } = require('util');
const { spawn } = require('child_process');

const {
fixture,
Expand All @@ -12,16 +13,27 @@ const {

const debug = false;

const test_forward = (process.platform !== 'win32');

if (!test_forward)
console.log('Skipping agent forwarding test on Windows');


const clientCfg = { username: 'foo', password: 'bar' };
const serverCfg = { hostKeys: [ fixture('ssh_host_rsa_key') ] };

{
const agent_sock = '/tmp/nodejs-ssh2-test-' + process.pid;
let agent;
if (test_forward)
agent = spawn('ssh-agent', ['-d', '-a', agent_sock]);

const { client, server } = setup_(
'Exec with OpenSSH agent forwarding',
{
client: {
...clientCfg,
agent: '/path/to/agent',
agent: agent_sock,
},
server: serverCfg,

Expand All @@ -45,8 +57,23 @@ const serverCfg = { hostKeys: [ fixture('ssh_host_rsa_key') ] };
const stream = accept();
stream.exit(100);
stream.end();
conn.end();

if (test_forward) {
conn.openssh_authAgent(function(err, stream) {
assert(!err, `Unexpected openssh_authAgent error: ${err}`);
assert(stream.type === '[email protected]',
`Unexpected openssh_authAgent channel type : ${stream.type}`);

conn.end();
agent.kill();
});

} else {
conn.end();
}

}));

}));
}));
}));
Expand Down

0 comments on commit 40fa58f

Please sign in to comment.