node.js - ssh 和 nodejs 应用程序
问题描述
我有一个运行一些 shell 命令的 nodejs 应用程序。我想使用 ssh 在另一台机器上执行这些命令。
我有这个:
snapInfo(snapName: string) {
return `snap info ${snapName}`;
}
我需要这样的东西:
snapInfo(snapName: string) {
return `ssh user@host snap info ${snapName}`;
}
该文件是一个 .ts 文件。我该怎么做?有什么建议么?这是我第一次看到 nodejs 应用程序。
谢谢你
解决方案
您可以为 Node.js使用出色的ssh2模块。
npm install ssh2
然后你可以通过添加一个新函数来连接到你的远程系统execSSHCommand
,而不是execCommand
在文件 shell-commands.ts 中使用。
import { Injectable } from '@nestjs/common';
import { promisify } from 'util';
import { exec } from 'child_process';
import { Client } from 'ssh2'
const exec_promise = promisify(exec);
function execute_over_ssh(cmd: string): Promise<{ stdout: string; stderr: string; }> {
return new Promise<{ stdout: string; stderr: string; }>((resolve, reject) => {
let conn = new Client();
conn.on('ready', function () {
let stdout = "", stderr = "";
conn.exec(cmd, function (err, stream) {
if (err) reject(err);
stream.on('close', function (code, signal) {
resolve({ stdout, stderr });
conn.end();
}).on('data', function (data) {
stdout += data.toString('utf8');
}).stderr.on('data', function (data) {
stderr += data.toString('utf8');
});
});
}).connect({ host: '127.0.0.1', port: 22, username: 'user', password: 'pass' });
});
}
@Injectable()
export class ShellService {
async execCommand(cmd: string, password?: string): Promise<string> {
if (password) {
// TODO: Possibly remove
const command = `echo ${password} | sudo -S ${cmd}`;
const { stdout, stderr } = await exec_promise(command);
return stdout;
} else {
const command = `${cmd}`;
const { stdout, stderr } = await exec_promise(command);
return stdout;
}
}
async execSSHCommand(cmd: string): Promise<string> {
const command = `${cmd}`;
const { stdout, stderr } = await execute_over_ssh(command);
return stdout;
}
}
推荐阅读
- azure - 在 yaml 管道配置中声明时,不会在 Azure Devops 中自动创建环境
- wordpress - Gutenberg 11.7.0 添加了 reset.css - 之后如何应用 CSS?
- mongodb - 在聚合中结合匹配过滤器
- java - 我正在尝试交换两个值,同时运行代码时出现此错误“不兼容的类型。找到:'int',需要:'int[]'”
- tensorflow - 如何将训练过程集成到不基于反向传播的 keras 中?
- java - java如何手动解析多部分/相关流
- windows - 在没有 WMI 的情况下在 VBScript 中检索进程的完整路径
- java - 获取:尝试将文件移动到文件夹时出现“java.nio.file.FileSystemException”
- python - 如何在詹金斯作业中运行具有命令行参数的python程序
- javascript - html2canvas + jsPDF IE中的多页