You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中通过SSH带密码连接远程Linux服务器执行命令并流式获取输出

在Node.js中通过SSH执行远程Linux命令并流式获取输出(密码认证版)

我之前做自动化运维工具的时候刚好碰到过一模一样的需求,用ssh2这个成熟的npm包就能完美解决——它不仅支持密码直接认证,还能原生处理命令输出的流,完全匹配你的需求。下面是我整理的完整可运行示例,你可以直接参考:

第一步:安装依赖

先把ssh2包安装到你的项目里:

npm install ssh2

第二步:完整代码示例

const { Client } = require('ssh2');

// 替换成你的远程服务器信息
const serverConfig = {
  host: '你的服务器IP地址',
  port: 22, // 默认SSH端口,修改过的话填对应值
  username: '你的服务器用户名',
  password: '你的服务器密码' // 这里就是密码认证的核心配置项
};

const sshClient = new Client();

// 连接成功后的处理逻辑
sshClient.on('ready', () => {
  console.log('✅ 已成功连接到远程服务器');
  
  // 这里可以替换成你要执行的任意命令,比如tail -f监控日志、批量文件处理等
  sshClient.exec('tail -f /var/log/syslog', (err, stream) => {
    if (err) throw err;
    
    // 实时流式获取命令的标准输出
    stream.on('data', (data) => {
      console.log('📤 远程输出:', data.toString());
      // 在这里可以对输出做后续处理:比如写入本地文件、解析日志内容、触发告警等
    });
    
    // 处理命令的错误输出
    stream.stderr.on('data', (data) => {
      console.error('❌ 远程错误输出:', data.toString());
    });
    
    // 命令执行完成/终止时的收尾操作
    stream.on('close', (code, signal) => {
      console.log(`🔚 命令执行结束,退出码: ${code}`);
      sshClient.end(); // 务必关闭SSH连接,避免资源泄漏
    });
  });
});

// 连接失败的错误处理
sshClient.on('error', (err) => {
  console.error('❌ SSH连接失败:', err.message);
});

// 启动SSH连接
sshClient.connect(serverConfig);

关键细节说明

  • 密码认证的配置:直接在serverConfig对象里填写password字段即可,ssh2会自动用这个密码完成身份验证,不需要额外的复杂逻辑。
  • 流式输出处理:通过stream.on('data')事件可以实时捕获命令的输出,哪怕是tail -f这种持续输出的命令,也能逐段拿到数据,非常适合日志监控、实时分析这类场景。
  • 异常处理:一定要监听error事件和stream.stderr,避免因为连接失败、命令报错等情况导致程序崩溃。
  • 资源回收:命令执行完成后记得调用sshClient.end()关闭连接,防止长期占用服务器SSH连接资源。

如果你的需求更复杂(比如需要执行多条命令、交互式输入sudo密码等),可以改用sshClient.shell()创建交互式shell会话,用法和exec类似,能支持更多交互场景。

内容的提问来源于stack exchange,提问作者usersam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:57:21