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

使用Node.js实现SSH服务器登录遇到问题求助

问题分析

你用exec执行ssh命令后只显示空行,核心问题有两个:

  • exec是回调触发机制,只有当命令完全执行结束才会返回输出,但SSH登录是持续的交互式会话,不会自动终止,所以回调永远不会触发,自然看不到内容。
  • 子进程没关联当前终端的标准输入/输出/错误流,没法处理SSH的交互式操作(比如输入密码、在服务器端执行命令)。
解决方案

方法1:用spawn替代exec(推荐)

spawn是Node.js更适合处理交互式进程的API,支持流式输出,还能配置终端关联:

const { spawn } = require('child_process');

// 替换成你的服务器IP
const sshProcess = spawn('ssh', ['<server-ip>'], {
  stdio: 'inherit', // 让子进程复用当前终端的输入输出流
  shell: true
});

sshProcess.on('error', (err) => {
  console.error(`启动SSH进程失败: ${err.message}`);
});

sshProcess.on('exit', (code) => {
  console.log(`SSH会话已结束,退出码: ${code}`);
});

方法2:修改exec配置(仅作参考)

如果坚持用exec,得配置stdio为inherit,但exec的回调机制本身不适合交互式场景:

const { exec } = require('child_process');

exec('ssh <server-ip>', {
  stdio: 'inherit'
}, (error) => {
  if (error) {
    console.error(`SSH进程出错: ${error.message}`);
  }
});
关键说明
  • stdio: 'inherit'是核心配置,它让子进程直接用当前终端的输入输出流,这样SSH的交互(密码输入、命令执行)就能正常工作,和你直接在终端敲ssh <server-ip>效果完全一致。
  • spawn比exec更适合这类长时间运行的交互式进程,它是流式处理,不用等进程结束就能响应输出,而exec会缓存所有输出直到进程终止,不适合持续会话场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:46:12