2016-06-11 2 views
0

버튼이있는 페이지를 제공하는 간단한 노드 서버가 있습니다. 버튼을 클릭하면 원격 호스트에서 명령을 실행해야합니다. 명령이 끝나면 출력은 함수의 응답에 주어져야하며 html로 표시되어야합니다.NodeJS의 원격 호스트에서 프로세스가 생성됨

현재이 서버 코드 :

app.use(logger("combined")); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 

app.get('/index.html', function (req, res) { 
    res.sendFile(__dirname + "/" + "index.html"); 
}) 

app.post('/connect', function (req, res) { 
    var spawn = require('cross-spawn-async'); 
    var mpiProc = spawn('ssh','[email protected]','"ls"', { stdio: ['pipe','pipe',2,'pipe'] }); 

    var grid = "...8.1..........435............7.8........1...2..3....6......75..34........2..6.."; 
    str = ""; 
    mpiProc.stdout.on('data', function(data) { 
     console.log(data); 
     str = data.toString(); 
     res.write('data: ' + JSON.stringify({ msg : str }) + '\n\n'); 
     // Output  
    }); 

    mpiProc.on('close', function(code) { 
     res.end(str); 
     // Script exit code 
    }); 

    mpiProc.on('error', function(code) { 
     res.end('stderr: ' + code); 
     // Script exit code 
    }); 
}) 
    require('http').createServer(app).listen(3000, function(){ 
    console.log('Listening on 3000'); 
}); 

다음 통화가 원격 호스트에서 'ls'이 명령을 실행하려고 볼 수 있듯이 :

var mpiProc = spawn('ssh','[email protected]','"ls"', { stdio: ['pipe','pipe',2,'pipe'] }); 

을하지만이되지 않습니다 반환 아무것도, 터미널에서 직접 서버에서 실행되는 동안, 그것은 디렉터리 콘텐츠의 목록을 반환합니다. 나는, 서버의 디렉토리 내용의 목록을 기대했던 반환

var mpiProc = spawn('ls', { stdio: ['pipe','pipe',2,'pipe'] }); 

: 명령은 내가이 일을 시도 스폰으로 이런 식으로 작동하는지 테스트합니다. 그러면 원격 호스트에 파이프를 만들어 명령을 실행 한 다음 서버의 명령 결과를 저장하는 방법은 무엇입니까?

답변

0

spawn()에 전달 된 두 번째 인수는 인수 배열입니다. 또한 수동으로 인수를 인용 할 필요가 없습니다. 이것은 작동합니다 : 당신은 ssh 연결을보다 프로그램 (경량) 제어를 원하는 경우

spawn('ssh', ['[email protected]', 'ls'], { stdio: ['pipe', 'pipe', 2, 'pipe'] }); 

마지막으로는, 거기 ssh2 모듈 (또는 그 위에 빌드 모듈 중),하지 않는 하위 프로세스를 사용하십시오.

관련 문제