Node.js 以用户身份将ssh2节点连接到ssh和sudo su,并运行命令
使用node ssh2模块,这就是我需要做的Node.js 以用户身份将ssh2节点连接到ssh和sudo su,并运行命令,node.js,sudo,su,ssh2,Node.js,Sudo,Su,Ssh2,使用node ssh2模块,这就是我需要做的 1.以本地用户身份ssh到服务器 2.sudo作为甲骨文:sudo su甲骨文 3.运行命令 我无法使用sudo su oracle,因此无法运行任何命令。 本地用户有权成为oracle,因此无需提供密码 我可以像一个命令一样运行多个命令- cd/home/run.sh 但是如果我需要在第一个命令所在的位置运行命令 苏多苏甲骨文;cd/home/run.sh 我没有得到回应 //代码片段 let fs = require('fs'), Clien
1.以本地用户身份ssh到服务器
2.sudo作为甲骨文:sudo su甲骨文
3.运行命令 我无法使用sudo su oracle,因此无法运行任何命令。 本地用户有权成为oracle,因此无需提供密码 我可以像一个命令一样运行多个命令- cd/home/run.sh 但是如果我需要在第一个命令所在的位置运行命令 苏多苏甲骨文;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,我想以oracle的身份运行sudo命令,然后运行其他命令。
是否有一个代码片段,有些人可以将他们的sudo su作为任何用户共享,然后运行命令您可以在提示下写入密码:
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();
});
}
如何禁用伪tty分配?已尝试conn.exec((命令),{pty:false},函数(err,stream){……}没有帮助。是否尝试了问题的答案?