node-ssh icon indicating copy to clipboard operation
node-ssh copied to clipboard

Unable to SSH tunnel to hit private API

Open Joe-Kollin opened this issue 3 years ago • 1 comments

Hey all,

I have a server in a private subnet that is hosting a REST API on port 80 and a jump box in a public subnet that I would like to tunnel through so that I can invoke the REST API in the same execution with axios. When I run the command line command to tunnel everything works fine:

ssh -i "keypair.pem" -L 8081:<API HOST>:80 <JUMP BOX USER>@<JUMP BOX IP>

Once I run that command, as long as I keep the session open, I can hit the API through Postman/Axios. All good.

I am trying to do the same thing with this library, but the connection is not being exposed properly and I can't figure out why. Here is my code:

const ssh = new NodeSSH();
await ssh.connect({
  host: '<JUMP BOX IP>',
  username: '<JUMP BOX USER>',
  privateKey: `RSA KEY`
});
ssh.connection?.forwardOut('127.0.0.1', 8081, <API HOST>, 80);
const response = await axios.get(`http://localhost:8081/<ENDPOINT PATH>`);

The connection opens fine and I can exec commands as I want. This issue may be a result of using async/await as well, but I would like to stick using that model if possible.

Thanks in advance for the eyes and any ideas.

Joe-Kollin avatar Jul 15 '22 18:07 Joe-Kollin