Estoy trabajando en una aplicación de nodo de reacción que se ejecutará en un contenedor acoplable. Esta aplicación será una GUI para muchas máquinas virtuales configuradas para los empleados de mi empresa, por lo que el objetivo es que pueda ejecutarse sin configurar nada en la máquina host. Simplemente instale el contenedor docker y ejecútelo.
El problema es que necesito ejecutar comandos en la máquina host desde el contenedor acoplable y obtener la salida. Así que probé este método SSH:
import exec from 'ssh-exec'; function streamToString(stream) { const chunks = []; return new Promise((resolve, reject) => { stream.on('data', (chunk) => { console.log(Buffer.from(chunk)) chunks.push(Buffer.from(chunk)) }); stream.on('error', (err) => reject(err)); stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8'))); }) } async function runCommand(command) { try { const res = await streamToString( exec(command, { user: 'user', host: IP_ADRESS, password: 'password' }) ); return res; } catch (error) { console.log(error); } },pero a veces funciona, a veces simplemente envía una cadena vacía, y también tarda mucho más de lo que pensaba.
** ¿Hay algún problema con mi código aquí? ¿O el método en sí es incorrecto? **
Ejemplo de uso:
const result = await runCommand(`git --git-dir=${path}/.git rev-parse --abbrev-ref HEAD`}Ejemplo del problema:
app.get("/testing", async (req, res) => { console.log(await runCommand('echo test1')) console.log(await runCommand('echo test2')) console.log(await runCommand('echo test3')) console.log(await runCommand('echo test4')) console.log(await runCommand('echo test5')) res.end("test ended"); })Producción:
Example app listening at http://localhost:3006 test2 test5