gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:49:27 28 4
gpt4 key购买 nike

在终端中,如果我使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com