我使用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
作为输出,但之后没有任何反应
请帮忙。
答案 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);
},
}