2017-11-09 9 views
0

SSH経由でローカルマシンのポートをリモートマシンのポートにマッピングするノードアプリケーションを作成しています。NodeJSアプリケーションのローカルポートにリモートポートを転送する方法

私が行うことができますシェルコマンドで:

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

1.2.3.4への永続的なSSH接続を開き、私の地元に9999にリモートで27017ポートをマッピングします。

しかし、この-Lアクションをnodejsで実行するにはどうすればいいですか? npm ssh2パッケージを使用してssh接続を実行しています。

+0

チェックこの1 https://github.com/localtunnel/localtunnel、私はそれはあなたがリモートにローカルで転送したいですか、またはリモートローカルに – yeya

+0

をやろうとしているまさにそれだと思いますか?あなたは質問し、あなたのタイトルは一致しません。 – Kenster

+0

私は自分のローカルシェルでmongodumpを使ってリモートデータベースのローカルダンプを作成しています – Andy59469

答えて

1

以下の例を使用して、逆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) 
関連する問題