Выполнение команд Linux с использованием ssh2-promise в NodeJS на удаленном сервере

Я пытаюсь выполнить команду yum install <package_name> на удаленном сервере Linux, используя пакет ssh2-promise, но мне не удалось получить ответ на команду для дальнейшей обработки и проверки.

Я пробовал следующее,

// Node:33528) UnhandledPromiseRejectionWarning: Unhandled promise rejection.
(async function(){
        try {
            const data = await this.ssh.exec("yum  repolist all");
            console.log("resp: ", data); 
            } catch(e) {
                console.log(e)
            }
        })();  // This fails 

        const socket = await this.ssh.spawn("yum repolist all");
        socket.on('data', function(data) {
              console.log("resp: " , data); // I get binary data not the human readable output
        });


        // Node:33528) UnhandledPromiseRejectionWarning: Unhandled promise rejection.
        this.ssh.exec("yum install <name>").then((data) => {
            console.log("resp: yum repolist all output: ", data); // This also fails and throws exception

        });

        // Throws again (Node:33528) UnhandledPromiseRejectionWarning: Unhandled promise rejection.
        const output = await this.ssh.exec("yum upgrade <name>");
        console.log("resp: ", output) 

Я также пытался использовать правильный блок try catch, но все равно выдает исключение unhandledPromise Exception. Может ли кто-нибудь помочь мне понять это?


person cslrnr    schedule 27.05.2020    source источник


Ответы (2)


Я думаю, вы получите что-то вроде следующего на выходе:

<Buffer 5b 73 75 64 6f 5d 20 70 61 73 73 77 6f 72 64 20 66 6f 72 20 64 61 72 74 68 63 75 63 75 6d 62 65 72 3a 20>

все, что вам нужно сделать, это преобразовать его в строку, используя функцию toString() JS.

person DarthCucumber    schedule 04.06.2020
comment
Да, я постараюсь вернуться - person cslrnr; 05.06.2020
comment
это сработало, я буду использовать функцию exec вместо этого, и я сделал ошибку, вызвав async fn внутри асинхронной функции - person cslrnr; 07.06.2020

Я сделал ошибку, вызвав асинхронную функцию внутри другой асинхронной функции, как показано ниже:

public async runCommand() {
     (async function () {
    try {
        const data = await ssh.exec("yum repolist all");
        console.log("resp: ", data);
    } catch (e) {
        console.log("Error - " + e);
    }
    })(); 
}

Изменил функцию, как показано ниже, и она сработала.

public async runCommand() { 
    try {
        const data = await ssh.exec("yum repolist all");
        console.log("resp: ", data);
    } catch (e) {
        console.log("Error - " + e);
    }
}
person cslrnr    schedule 06.06.2020