Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用ssh2 promise module node js将命令传递给服务器?_Javascript_Node.js_Ssh_Async Await_Node Modules - Fatal编程技术网

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);