我正在创建一个 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) 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!