【发布时间】:2021-05-01 13:46:02
【问题描述】:
在我的项目中,我有一组设备 ip 和一组命令。 我需要为每个设备打开新的 ssh shell,它在同一个 shell 中执行所有命令,所以它不会为每个命令打开新连接,这就是我使用 ssh2shell 包的原因。
问题是我需要等待所有这些都结束,并且它需要是异步的,所以它不会在开始与其他设备的会话之前等待每个 ip 的回答。在获得所有响应后,它将所有数据保存在某个数组中,该数组中的每个单元格都代表一个 ip 响应。
我知道它需要使用async、await 或Promise,但我没有成功管理它。
主要代码:
function monitorDevices() {
const DEVICES_IPS = [ "10.10.10.1", "20.20.20.1", "30.30.30.1" ];
const COMMANDS = [ "cat /var/log/messages", "cat /proc/stat", "df -h /var/log", "free -t -m" ];
let data = [];
DEVICES_IPS.forEach(device => {
data.push(sshService.exec(device, COMMANDS));
});
console.log(data);
}
ssh服务代码:
function exec(device, commands) {
var host = {
server: {
host: device,
userName: process.env.USERNAME,
password: process.env.PASSWORD,
},
commands: commands
};
var SSH2Shell = require ('ssh2shell'),
SSH = new SSH2Shell(host),
callback = function(sessionText){
// if I console.log(sessionText) here, it gives my a good result.
return sessionText;
}
SSH.connect(callback);
}
谢谢!
【问题讨论】:
标签: node.js asynchronous ssh async-await promise