2

私の目的は、ユーザーがリモートで SSH サーバーに接続できるようにする Web アプリケーションを作成することです。つまり、コンピューターに SSH クライアントをインストールする必要はありません。したがって、これは、私のサーバーがユーザーとその SSH サーバーの間の中間インターフェイスになることを意味します。

ノード用の SSH2 モジュールを見つけました: https://github.com/mscdex/ssh2

接続の最も適切な方法は、shell()メソッドを使用することであると考えました。

以下は、シェルを機能させるための基本的な試みです。

var Connection = require('ssh2');

var c = new Connection();

c.on('ready', function() {
   c.shell(onShell);
});

var onShell = function(err, stream) { 
    if (err != null) {
        console.log('error: ' + err);
    }

    stream.on('readable', function() {
        var chunk;
        while (null !== (chunk = stream.read())) {
            console.log('got %d bytes of data', chunk.length);
        }
    });

    stream.write('ls\r\n');

    console.log('Shell');

}

c.connect({
    host: 'localhost',
    port: 22, 
    username: 'matt',
    password: 'password'
});

正常に接続され、エラーはありませんが、「データの %d バイトを取得しました」は表示されません。どうすればこれを修正できますか?

さらに、この方法は、多数の異なる接続が同時に発生する可能性がある大規模なアプリケーションで賢明でしょうか?

4

2 に答える 2

3

ssh2 currently does not use streams2 yet because things get tricky because of the two (stdout and stderr) "sub-"streams and trying to handle backpressure in a sane way. I am still hoping I can find some solution via streams2 though.

For now, you will have to listen for 'data', 'drain', etc. events instead.

UPDATE: ssh2 v0.3.x now supports streams2.

于 2013-11-01T13:27:40.567 に答える