2017-10-17 14 views
3

ssh 쉘 명령을 실행할 npm 스크립트를 작성하려고합니다. 현재는 osascript 명령을 실행하여 터미널 창을 열고 명령을 실행하여 작동합니다.npm 명령에서 ssh 쉘 스크립트를 실행하십시오.

현재 터미널에서 명령을 실행하도록 변경하고 싶습니다. 스크립트에는 shelljsexecutive이 모두 포함되어 있습니다. executive을 사용하면 아무 일도 일어나지 않고 스크립트가 종료됩니다. shelljs으로 내가 얻을 : 명령이 실행되는

Pseudo-terminal will not be allocated because stdin is not a terminal. the input device is not a TTY

은 예상대로 I 출력 명령 및 복사 및 붙여 넣기가 작동됩니다 ssh -i [ssh-key] -t [email protected][ip-address] eval $(base64 -D <<< [command in base64])

Base64로 명령이 sudo docker exec -i -t $(sudo docker ps -aqf "ancestor=' + containerName + '") /bin/bash

입니다 원격 컴퓨터로 sshing하고 docker exec 명령을 실행합니다.

-t 옵션을 제거하면 경고 메시지가 표시되지 않지만 콘솔에 출력이없고 스크립트가 멈 춥니 다 (출력이없는 백그라운드에서 명령을 실행한다고 가정 함). eval ... 부분을 제거하면 출력 단자가 서버에 있지만 입력 단자가 없을 때 볼 수있는 것처럼 보입니다.

동일한 터미널이나 새 탭에서이 명령을 실행하려면 어떻게해야합니까? 이 작업을 수행하기 위해 osascript 명령을 사용해야하는 경우에도 문제가 없습니다. 필자는 PhpStorm의 터미널에서이 명령을 실행할 것입니다. 여기에 편집

는 코드 블록의 :

var execCommand = 'sudo docker exec -i -t $(sudo docker ps -aqf "ancestor=nginx") /bin/bash'; 

var buffer = new Buffer(execCommand); 
var encoded = buffer.toString('base64'); 

var cmd = "ssh -i " + this.keyPath + " -t [email protected]" + ip + " eval $(base64 -D <<< " + encoded + ") "; 

shell.exec(cmd); 

편집 2

내가 성공적으로 기계에 ssh를하고 명령 프롬프트를 얻을하지만 난을 얻고 있습니다 명령을 추가하면 the input device is not a TTY 오류가 발생합니다.

var docker_exec = 'sudo docker exec -it $(sudo docker ps -aqf "ancestor=' + containerName + '") /bin/bash'; 
var encoded = new Buffer(docker_exec).toString('base64'); 

var sshTerm = spawn('ssh', [ 
    '-i', 
    this.keyPath, 
    '[email protected]' + ip, 
    'eval', 
    'eval $(base64 -D <<< ' + encoded + ')' 
], { 
    stdio: 'inherit', 
    shell: true 
}); 

sshTerm.on('exit', function() { 
    process.exit(0); 
}); 
+0

사용한 코드를 게시 할 수 있습니까? –

+0

도움이되는 @ TarunLalwani 희망 – Ethan22

답변

1

내가 확인했는데 shelljs.exec는 TTY가 아닌 명령에 적합합니다. TTY 기반 명령의 경우 일반 스폰 방법을 사용할 수 있습니다. 다음은 저에게 큰 도움이되는 샘플 코드입니다

var spawn = require('child_process').spawn; 

var sshTerm = spawn('ssh', ["[email protected]", ""], { 
    stdio: 'inherit' 
}); 

// listen for the 'exit' event 
// which fires when the process exits 
sshTerm.on('exit', function(code, signal) { 
    if (code === 0) { 
    // process completed successfully 
    } else { 
    // handle error 
    } 
}); 
+0

답장을 보내 주셔서 감사합니다. 오늘 나중에 테스트하고 다시 연락하겠습니다. – Ethan22

+0

큰 도움이되었지만 또 다른 오류가 나타납니다. 내 편집 2를 확인하고 생각을 볼 수 있습니까? – Ethan22

+0

''-tt ',''''우분투 @'+ ip ''를 추가 해보십시오. –