我正在尝试使用mscdex/ssh2在远程linux机器上以root身份登录,我正在尝试实现的步骤是:
但是我在第二部分失败了,我无法正确设置密码,这是我的代码。
conn.on('ready', function() {
conn.exec('sudo -s ls /', { pty: true }, (err, stream) => {
if (err) {
res.send(err);
}
stream.on('exit', (code, signal) => {
console.log(`Stream :: close :: code: ${code}, signal: ${signal}`);
});
stream.on('data', data => {
// here it's where supposedly the password should be given
stream.write('r00tpa$$word' + '\n');
console.log(data);
});
});
}).connect({
host: '192.168.100.100',
username: 'fakeAdmin',
password: 'fakePassword'
});
我已经将pty选项设置为true,但我只是在promt上收到错误消息。
更新:
这是我的新代码段:
const Client = require('ssh2').Client;
const conn = new Client();
const encode = 'utf8';
conn.on('ready', () => {
conn.shell(false, { pty: true }, (err, stream) => {
if (err) { console.log(err) }
stream.on('data', (data) => {
process.stdout.write(data.toString(encode));
});
stream.write('ls -a\n');
stream.write('uptime\n');
stream.write('su\n'); // here nothing seems to happen
stream.write('rootPassword\n'); // here also
stream.write('cd /tmp && ls\n');
});
})
.connect({
host: "192.168.100.100",
username: "username",
password: "usernamePassword"
});
我设法以更清洁的方式执行了几个命令部分,我甚至在库github页面.shell command "su" loses interaction上提出了一个问题,但是现在它发生了什么它有点奇怪,我可以运行尽可能多的命令就像我什么,但是当我运行“su”命令似乎没有发生任何事情时,有人会先介入这个吗?或者我做错了什么? 对不起,如果我无法解释自己。
问候。
答案 0 :(得分:0)
考虑使用node-ssh
。我以前没有遇到任何问题,它也更现代,因为它有一个基于promise的异步接口。
如果需要执行root操作,还应该直接连接到root用户,除非您的用户在执行sudo
时没有要求输入密码,例如使用Ubuntu AMI的EC2实例默认情况下,ubuntu
用户没有密码(您通过ssh密钥对进行身份验证)。
尝试通过命令登录并以纯文本格式输入密码不是一个好主意。另外,请考虑向root用户添加ssh密钥,以使用私钥而不是密码进行身份验证。
const SSH = require('node-ssh')
const ssh = new SSH()
ssh.connect({
host: '<host>',
username: 'root',
password: '<password>'
}).then(() => ssh.exec('your command'))
答案 1 :(得分:0)
我找到了一种方法来执行我要搜索的内容,这是代码:
.Rmd