javascript - SSH 命令在终端中工作,但在 nodejs/ssh2 中失败

标签 javascript node.js linux ssh openwrt

在终端中,如果我使用 ssh 登录并运行类似 service something reload 的命令它运行得很好,但是当我使用 ssh2 库(.exec 函数)在 nodejs 脚本中执行相同的命令时,它没有运行并且我收到错误“ash: command not found”。
尝试使用 sudo service..但这是一回事。
有些命令确实有效,例如 uptimeifconfig ,但服务没有,我需要那个。我要连接的服务器是一个运行 open wrt 的路由器。

这是 nodejs 脚本:

const Client = require('ssh2').Client;
const conn = new Client();

conn.on('ready', async() => {

  conn.exec('service network reload', {
    env: {'PATH': '/usr/sbin:/usr/bin:/sbin:/bin'},
  }, (err, stream) => {
    if(err)
      return console.log(err);

    stream.on('close', () => console.log('ok'));
    stream.stderr.on('data', data => console.log(data.toString()));
  }); 

}).connect({
  host: ROUTER_HOST,
  port: 22,
  username: 'root',
  password: '1234'
});
which 的终端输出截图:
wtf

最佳答案

如果您收到 command not found错误,它只是意味着你的命令,在这种情况下是 service , 在环境的 $PATH 中找不到.
要么为连接正确设置环境,要么为命令使用绝对路径。
对于 systemd 服务,请使用 /usr/sbin/service something reload , 或 /bin/systemctl reload something等等
您可以使用 which 找到可执行文件的路径命令,如 which servicewhich systemctl .
对于较旧的初始化脚本服务,运行 /etc/init.d/something restart .

关于javascript - SSH 命令在终端中工作,但在 nodejs/ssh2 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63968319/

相关文章:

javascript - Node 中具有原型(prototype)的单例对象

node.js - npm install 命令下载所需软件包的源位置是什么?

linux - 为什么需要在 Datastax Cassandra 中关闭交换?

javascript - 使用javascript的裁剪工具

javascript - 在indexedDB中启动事务时为"TypeError: db is null"

javascript - 不确定如何在 Express/MongoDB 应用程序中处理数据访问对象/层

c - linux 中的 sched_setaffinity cpu 亲和性

linux - mvn 依赖 :get -Ddest parameter in Linux

javascript - 我是否应该将 Babel 用于 Node.js 服务器应用程序?为什么?

javascript - 多次点击事件 - 杂乱无章?