Javascript 节点SSH2多次连接

Javascript 节点SSH2多次连接,javascript,node.js,express,ssh,sftp,Javascript,Node.js,Express,Ssh,Sftp,我想连接到远程机器并在该机器上执行shell命令。我可以上传文件并成功执行命令。但我只能做一次。我希望能够多次这样做 下面是我的JS文件,它使用SSH2模块 var Connection = require('ssh2'); var fs = require('fs'); c = new Connection(); c.on('ready', function() {

我想连接到远程机器并在该机器上执行shell命令。我可以上传文件并成功执行命令。但我只能做一次。我希望能够多次这样做

下面是我的JS文件,它使用SSH2模块

                var Connection = require('ssh2');
            var fs = require('fs');

            c = new Connection();
            c.on('ready', function() {
              console.log('Connection :: ready');

              c.sftp(
                        function (err, sftp) {
                            if ( err ) {
                                console.log( "Error, problem starting SFTP: %s", err );
                                //process.exit( 2 );
                            }

                            console.log( "- SFTP started" );


                            sftp.unlink( "testfile.py", function(err){ 

                                if ( err ) {
                                    console.log( "Error, problem starting SFTP: %s", err );
                                    //process.exit( 2 );
                                }
                                else
                                {
                                    console.log( "file unlinked" );
                                }

                            });

                            // upload file
                            var readStream = fs.createReadStream( "testfile.py" );
                            var writeStream = sftp.createWriteStream( "testfile.py" );


                            writeStream.on('end', function () {

                                console.log( "sftp connection closed" );

                              });


                            // what to do when transfer finishes
                            writeStream.on(
                                'close',
                                function () {

                                    console.log( "- file transferred" );

                                    sftp.chmod( "testfile.py", 777, function(err){ 

                                        if ( err ) {
                                            console.log( "Error, problem starting SFTP: %s", err );
                                            //process.exit( 2 );
                                        }
                                        else
                                        {
                                            console.log( "Mode changed" );
                                        }

                                    });



                                    //execute the program
                                    c.exec('python testfile.py', function(err, stream) {

                                        if (err) throw err;
                                        stream.on('data', function(data, extended) {
                                          console.log((extended === 'stderr' ? 'STDERR: ' : 'STDOUT: ')
                                                      + data);
                                        });
                                        stream.on('end', function() {
                                          console.log('Stream :: EOF');
                                        });
                                        stream.on('close', function() {
                                            console.log('Stream :: close');

                                            // close the ftp connection
                                            sftp.end();
                                            // fs.end();
                                            //process.exit( 0 );

                                        });
                                        stream.on('exit', function(code, signal) {
                                          console.log('Stream :: exit :: code: ' + code + ', signal: ' + signal);
                                          //c.end();
                                        });
                                      });





                                }
                            );

                            // initiate transfer of file
                            readStream.pipe( writeStream );
                        }
                    );





            });
            c.on('keyboard-interactive', function(name, instructions, instructionsLang, prompts, finish) {
              console.log('Connection :: keyboard-interactive');
              finish(['pwd']);
            });
            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');
            });
            c.connect({
              host: 'host',
              port: 22,
              username: 'uname',
              password: 'pwd',
              tryKeyboard: true
            });

ssh2 v0.2.22应具有更好的连接实例重用支持。如果您遇到任何问题,请随时发布。

您是在谈论生成子进程吗?实际上没有。我想再次运行相同的脚本。但是,连接没有再次处于就绪状态。我每次都在创建新的连接,所以我看不出有什么问题。你能把它全部封装在一个函数中,然后在“关闭”时再次调用它,并在它外面实现一个计数器,计算你想要运行它的次数吗?谢谢你给我指明了正确的方向。实际上,我在不同的文件中编写了这个脚本,并从另一个文件调用require'./ssh2.js'。这就是它不再被处决的原因。现在,我已经将整个脚本包装在一个函数中,我只是调用该函数。