在终端中,如果我使用 ssh 登录并运行类似 service something reload
的命令它运行得很好,但是当我使用 ssh2 库(.exec
函数)在 nodejs 脚本中执行相同的命令时,它没有运行并且我收到错误“ash: command not found”。
尝试使用 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
的终端输出截图:最佳答案
如果您收到 command not found
错误,它只是意味着你的命令,在这种情况下是 service
, 在环境的 $PATH
中找不到.
要么为连接正确设置环境,要么为命令使用绝对路径。
对于 systemd 服务,请使用 /usr/sbin/service something reload
, 或 /bin/systemctl reload something
等等
您可以使用 which
找到可执行文件的路径命令,如 which service
或 which systemctl
.
对于较旧的初始化脚本服务,运行 /etc/init.d/something restart
.
关于javascript - SSH 命令在终端中工作,但在 nodejs/ssh2 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63968319/