无法执行nodejs simple-ssh模块的.exec()方法

时间:2016-07-21 11:23:23

标签: javascript node.js npm

我使用npm的simple-ssh模块以root用户身份连接到远程主机 我还有一个超级用户帐户serviceUser。我需要对此用户执行su并执行几个命令。但是su serviceUser(注意:su serviceUser是无密码的)没有被执行 代码如下:

var ssh = new SSH({
            host: hostserver,
            user: 'root',
            timeout: 1500000,
            key: require('fs').readFileSync("D:/Keys_pair_prvt_pub/rsa_key"),
            agent: process.env.SSH_AUTH_SOCK,
            agentForward: true
            });
ssh
    .exec('whoami',{
        out: function(stdout) {
            logs += stdout;
            console.log(stdout);
        }
    })
    .exec('su serviceUser',{
        out: function(stdout) {
            logs += stdout;
            console.log(stdout);
        }
    })
    .exec('sh myScript.sh',{
        out: function(stdout) {
            logs += stdout;
            console.log(stdout);
        }
    })
    .exec('echo "exiting shell"',{
        out: function(){
            try{
                ssh.end();
                console.log("exiting");
                defer.resolve(obj);
            } catch(err){
                defer.reject(err);
            }
        }
    }).start();

.exec('whoami',{块正在执行,但.exec('su serviceUser',{块没有执行 在输出控制台中,由于root,我得whoami作为输出,但之后没有任何反应 请帮忙。

1 个答案:

答案 0 :(得分:1)

所以我遇到了类似但不同的问题。很难说你四年前的情况是什么,但如果有人再次来到这里,这里是我用来捕捉类似但不同的错误的代码,其中只是“什么也没发生”。 (我不确定为什么这是他们提到的最后一件事,因为几乎每个人都想使用它。)

the docs 开始,假设在连接或 ssh 进程本身中抛出错误,这应该捕获它并吐出堆栈跟踪。:

ssh.on('error', function(err) {
    console.log('Oops, something went wrong.');
    console.log(err);
    ssh.end();
});

此外,除了标准输出处理程序 out: 之外,要获取每个 exec 命令的错误,最好在处理程序中添加一些 err:,如下所示:< /p>

{
    out: function (stdout) {
        console.log(stdout);
    },
    err: function (stderr) {
        console.error('! ERROR !', stderr);
    },
}