javascript - 在 nodejs 中保持 SSH 连接

标签 javascript node.js

我正在使用 simple-ssh npm 模块进行远程连接,它在下面的代码中运行良好

 var SSH = require('simple-ssh');

 var ssh = new SSH({
   host: 'localhost',
   user: 'username',
   pass: 'password'
 });

但问题是当我第一次执行命令时它工作正常,但是当我下次尝试执行时进程进入空闲状态。

 window.setInterval(function(){
   ssh.exec('echo $PATH', {
      out: function(stdout) {
         console.log(stdout);
      }
   }).start();
 }, 1000);

定时器第一次执行,第二次不执行。

最佳答案

似乎在上一个调用尚未完成时调用 exec 会导致问题(至少,当我测试您的脚本时它看起来是这样的)。

不使用 setInterval,而是使用 setTimeout 并在 exec 结束但开始新调用之前重置连接。

这对我有用:

setTimeout(function executeCommand() {
  ssh.exec('echo $PATH', {
    out: function(stdout) {
      console.log('S', stdout);
    },
    exit: function() {
      ssh.reset(function() {
        setTimeout(executeCommand, 1000);
      });
    }
  }).start();
}, 1000);

关于javascript - 在 nodejs 中保持 SSH 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21184415/

相关文章:

node.js - CORS 预检请求后 302 重定向到 nodejs 服务器

javascript - 当两个事件同时触发时如何解决promise?

java - 我将 jsp 中的值作为不同的值而不是我输入的值获取

javascript - 带日期的 JS If 语句

javascript - 如何使用 JavaScript 在 FULLSCREEN 中打开一个新窗口?

javascript - jQuery:使用 Object Literal 的信息克隆 HTML

javascript - JS : Timer function with dynamic interval getting "off" by one second(out of sync)?

node.js - Node-Webkit Facebook 集成

javascript - 使用 mongoose populate 过滤数据

node.js - 如何使用 express.js 正确地将 mysql 连接传递给路由