以用户身份将ssh2转换为ssh和sudo su并运行命令

时间:2019-05-08 17:18:47

标签: node.js sudo su ssh2

使用节点ssh2模块,这是我需要做的
1.以本地用户身份SSH到服务器
2. sudo as oracle:sudo su oracle
3.运行命令

我无法对su oracle进行sudo操作,因此无法运行任何命令。 本地用户具有成为oracle的特权,因此无需提供密码。

我可以像这样运行多个命令- cd / home; ./ run.sh

但是如果我需要在第一个命令所在的位置运行命令 sudo su oracle; cd / home; ./run.sh

我没有收到回复

//代码段

let fs = require('fs'),
Client = require('ssh2').Client;
const executeRemote = (command, remoteServer, user, privateKey) => {
return new Promise((resolve, reject) => {
    let conn = new Client();
    let outputData = '';
    console.log('privatekey is '+privateKey);
    conn.on('ready', function () {
        conn.exec((command), function (err, stream) {
            if (err) {
                reject(err);
            }
            // eslint-disable-next-line no-unused-vars
            stream.on('close', function (code, signal) {
                console.log('outputData is ', outputData);
                console.log('code is '+code);
                if (code === 0)
                    resolve(outputData);
                else
                    reject(outputData);

                conn.end();
            }).on('data', function (data) {
                //console.log('data is ', data.toString());
                outputData = outputData + data.toString();
            }).stderr.on('data', function (data) {
                console.log('stderr data Error- '+ data.toString());
                //check if data.toString() has WARNING
                let regex = '[WARNING]';
                if (data.toString().match(regex))
                    outputData = outputData + data.toString();
                else
                    reject(new Error('Failed to run the command- ' + command + ' .Error- ' + data.toString()));
            });
        });
    }).connect({
        host: remoteServer,
        port: 22,
        username: user,
        privateKey: require('fs').readFileSync(privateKey)

    });
});

};

一旦我可以以本地用户身份使用ssh,我想将命令以sudo的身份运行为oracle,然后运行其他命令。 是否有一个代码片段,一些人可以以任何用户的身份共享他们的sudo su,然后运行命令

1 个答案:

答案 0 :(得分:0)

您可以在提示符下输入密码:

ssh.exec('sudo su - ' + sudoUserName, { pty: true }, function (err, stream) {
stream.on('close', (code, signal) => {
        //clean up
}).on('data', (data) => {

    if (data.toString().substring(0, sudoUserName.length) === sudoUserName) {
        //logged in successfully
    }
    else {
        //enter password
        stream.write(password + '\n');
    }

}).stderr.on('data', (data) => {
    stream.close();
});
}