gpt4 book ai didi

node.js - 如何在 NodeJS 应用程序中将远程端口转发到本地端口

转载 作者:行者123 更新时间:2023-12-02 14:30:48 28 4
gpt4 key购买 nike

我正在创建一个 Node 应用程序,它通过 SSH 将本地端口映射到远程机器上的端口。

在 shell 命令中,我可以这样做:

ssh -fN -l username -i ~/.ssh/myKey.pem  -L 9999:localhost:27017  1.2.3.4

这会打开到 1.2.3.4 的持久 ssh 连接,并将远程上的 27017 端口映射到我的本地上的 9999。

但是我怎样才能让这个 -L Action 在 nodejs 中发生
我正在使用 npm ssh2 包来执行 ssh 连接。

最佳答案

您可以使用下面的示例来执行反向 ssh 隧道。我假设远程主机在示例中使用公钥和私钥身份验证,如果不是这种情况,请相应地更改示例。不要忘记,您必须监听您将请求转发到的本地端口。

var path = require('path');
var fs = require('fs');
var Connection = require('ssh2');
var net = require('net')
var c
var username = 'username'
var hostname = 'remote host IP or domain name'
var port = 22
var privKey = path.join(__dirname, 'path to private key', 'filename')
var localAddr = 'localhost'
var localPort = 'local port on which you want to receive the requests'
var remotePort = 'remote port that you want to forward'
var remoteAddr = '0.0.0.0'

c = new Connection()
c.on('connect', function() {
console.log('Connection :: connect')
})

c.on('tcp connection', function(info, accept, reject) {
console.log('TCP :: INCOMING CONNECTION: ' +
require('util').inspect(info));

var stream = accept()
var socket


stream.on('data', function(data) {
console.log('TCP :: DATA: ' + data);
})

stream.on('end', function() {
console.log('TCP :: EOF');
})

stream.on('error', function(err) {
console.log('TCP :: ERROR: ' + err);
})

stream.on('close', function(had_err) {
console.log('TCP :: CLOSED', had_err ? 'had error' : '');
})

stream.pause()
socket = net.connect(localPort, localAddr, function () {
stream.pipe(socket);
socket.pipe(stream);
stream.resume();
})
})

c.on('ready', function() {
console.log('Connection :: ready')
c.forwardIn(remoteAddr, remotePort, function(err) {
if (err) { throw err }
console.log('Forwarding connections from remote server on port 7070 to
node socket!');
})
})

c.on('error', function(err) {
console.log('Connection :: error :: ', err)
})

c.on('end', function() {
console.log('Connection :: end')
})

c.on('close', function(had_error) {
console.log('Connection :: close', had_error ? 'had error' : '')
})

var obj = {
host: hostname,
port: port,
username: username,
privateKey: fs.readFileSync(privKey).toString()
}

c.connect(obj)

关于node.js - 如何在 NodeJS 应用程序中将远程端口转发到本地端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47205622/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com