2017-11-09 4 views
0

로컬 포트를 SSH를 통해 원격 시스템의 포트에 매핑하는 노드 응용 프로그램을 만듭니다.NodeJS 응용 프로그램에서 로컬 포트로 원격 포트를 전달하는 방법

쉘 명령에서 내가 할 수있는 :

1.2.3.4에 영구적 인 ssh 연결을 열고 내 지역에 9999 원격에 27017 포트를 매핑
ssh -fN -l username -i ~/.ssh/myKey.pem -L 9999:localhost:27017 1.2.3.4 

.

하지만이 -L 조치를 nodejs에서 수행하려면 어떻게해야합니까? npm ssh2 패키지를 사용하여 ssh 연결을 수행하고 있습니다.

+0

확인이 하나 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)