【发布时间】:2021-01-06 03:13:55
【问题描述】:
在终端中,如果我使用 ssh 登录并运行类似 service something reload 的命令,它运行得很好,但是当我使用 ssh2 库(.exec 函数)在 nodejs 脚本中执行相同的命令时,它不会运行并且我收到一个错误“ash:找不到命令”。
用sudo service.. 试过,但结果是一样的。
有些命令确实有效,例如uptime 或ifconfig,但服务无效,我需要那个。我要连接的服务器是一个运行 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 的终端输出截图:
【问题讨论】:
-
我想您的 nodejs/ssh2 设置使用的环境与您的登录终端不同。你能做
printenv之类的事情并检查结果吗?有初始化文件吗? -
如果您可以通过 .exec() 传递一个
options对象,那么将opts.shell设置为您选择的 shell 的完整路径名会发生什么? -
ash: printenv: not found如果我使用 ssh2 执行此命令 :( -
Milag 似乎没有 ssh2 exec 的
shell选项。有一个shell方法,但我认为它启动了一个我不想要的交互式终端。我只需要执行一个命令并退出
标签: javascript node.js linux ssh openwrt