2017-01-03 3 views
1

現在、私たちの内部CLIツールをコマンドラインノードアプリケーションとして再構築しています。これの一部は、このアプリケーションの特定のサーバー部分にSSHへのbashスクリプトを再構築することです。ノードスクリプトからの対話型SSHセッションを開く

私は実際にSSHを実行するためにchild_processspawn機能を使用する方法を知っているが、これは単に(sshコマンドにフラグ-ttを用いた場合であっても)直接シェルにSSH'ingと同じ結果が得られていません。 1つは、入力されたコマンドが画面に2回表示され、これらのリモートマシンでnanoを使用しようとすると、まったく機能しません(画面サイズが正しくない、コンソールウィンドウの約半分しか使いません。

ノードアプリケーションでこれを行うより良い方法はありますか?これは私が現在、SSHセッションを開始するために使用する一般的なコードです:

run: function(cmd, args, output) { 
    var spawn = require('child_process').spawn, 
     ls = spawn(cmd, args); 

    ls.stdout.on('data', function(data) { 
     console.log(data.toString()); 
    }); 

    ls.stderr.on('data', function(data) { 
     output.err(data.toString()); 
    }); 

    ls.on('exit', function(code) { 
     process.exit(code); 
    }); 

    process.stdin.resume(); 
    process.stdin.on('data', function(chunk) { 
     ls.stdin.write(chunk); 
    }); 

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

の作者ですモジュール[ssh2-client](https://github.com/MatthieuLemoine/ssh2-client) – MatthieuLemoine

答えて

1

あなたはssh2-clientパッケージ

const ssh = require('ssh2-client'); 

const HOST = '[email protected]'; 

// Exec commands on remote host over ssh 
ssh 
    .exec(HOST, 'touch junk') 
    .then(() => ssh.exec(HOST, 'ls -l junk')) 
    .then((output) => { 
    const { out, error } = output; 
    console.log(out); 
    console.error(error); 
    }) 
    .catch(err => console.error(err)); 

// Setup a live shell on remote host 
ssh 
    .shell(HOST) 
    .then(() => console.log('Done')) 
    .catch(err => console.error(err)); 

免責事項を使用することができます。私は私が作ったこのモジュール

関連する問題