Javascript 如何使用ssh2 promise module node js将命令传递给服务器?
我有以下代码:Javascript 如何使用ssh2 promise module node js将命令传递给服务器?,javascript,node.js,ssh,async-await,node-modules,Javascript,Node.js,Ssh,Async Await,Node Modules,我有以下代码: var sshPromise=require('ssh2-promise'); var x={ host:'host', username:'username', password:'mypassword' }; var ssh=new sshPromise(x); ssh.connect().then(()=>{ console.log('connected...'); }); //Get a shell session ssh.she
var sshPromise=require('ssh2-promise');
var x={
host:'host',
username:'username',
password:'mypassword'
};
var ssh=new sshPromise(x);
ssh.connect().then(()=>{
console.log('connected...');
});
//Get a shell session
ssh.shell().then((socket) => {
socket.on('data', (data) => {
console.log(data.toString());
})
//Can write to socket
//console.log('here<--');
socket.write('my password');// <----sending password to enter the server
});
是否有任何方法可以多次调用use the data,而不是每次需要从shell获取输出时都创建一个新的承诺?使用
async
/wait
您可以使用承诺等待“data”事件触发:
const socket = await ssh.shell();
const data = await new Promise(resolve => socket.on('data', resolve));
socket.write('my password');
这样,socket.write
只有在您拥有数据后才会被调用
如果需要多次使用,可以定义一个函数:
const waitForDataAsync = socket => new Promise(resolve => socket.on('data', resolve));
然后像这样使用:
const socket = await ssh.shell();
const data = await waitForDataAsync(socket);
socket.write('my password\n');
//to fetch next shell output
const data_1 = await waitForDataAsync(socket);
好的,它工作得很好,shell输出存储在数据中。现在,我使用socket.write将命令传递给服务器。为了得到这个输出,我做了如下操作:constdata_1=wait new Promise(resolve=>socket.on('data',resolve))代码>我觉得这有点不对劲,只是想澄清一下,如果下次我想获取新的输出,有没有办法在不创建任何新承诺的情况下使用这些数据?@DarthCucumber您可以在问题中添加新代码吗?如果没有其他依赖于新数据,您可以通过回调,但如果您的下一阶段需要等待响应,在我看来,使用承诺将更具可读性。您甚至可以将逻辑包装到函数中;请参阅我的编辑。
const socket = await ssh.shell();
const data = await waitForDataAsync(socket);
socket.write('my password\n');
//to fetch next shell output
const data_1 = await waitForDataAsync(socket);