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

使用Bash脚本拉取远程服务器Linux待处理安全更新至Nagios时遇报错

排查sshpass执行远程命令报错:No such file or directory

看起来你是把ssh命令的格式搞混了,这才导致了sshpass: Failed to run command: No such file or directory的错误。咱们一步步来修正:

首先,修正命令格式(核心问题)

你的原命令把ssh的参数和远程命令的写法都搞错了,sshpass的正确用法是先指定密码,然后调用ssh命令并传递ssh的配置参数,最后用引号包裹要在远程执行的命令。正确的命令应该是这样:

UPDATES=$(sshpass -p "password" ssh -o StrictHostKeyChecking=no user@server "/usr/lib/update-notifier/apt-check" 2>&1)
echo "$UPDATES"

原命令的错误点拆解:

  • 参数位置错误:StrictHostKeyChecking=no是ssh的配置参数,不是sshpass的,必须通过ssh -o来传递
  • 远程命令写法错误:要在远程执行的命令必须放在ssh连接信息的后面,并用引号包裹,而不是直接拼在user@server后面(这样ssh会把/usr/lib/update-notifier/apt-check当成主机名的一部分,自然找不到)
  • 额外小建议:echo变量时用双引号包裹,避免因为输出内容里的空格导致内容被拆分显示

如果修正后还是报错,检查这两点

  1. 确认远程服务器上的文件存在
    手动登录到远程服务器,执行/usr/lib/update-notifier/apt-check看看是否能正常运行。如果提示“No such file or directory”,说明这个路径不对:

    • 有些系统可能把这个工具放在其他位置,比如/usr/bin/apt-check
    • 如果是Ubuntu/Debian系统,可能需要先安装update-notifier-common包:sudo apt install update-notifier-common
  2. 检查sshpass是否安装
    虽然报错提示的是找不到命令,但也可以确认下本地机器是否安装了sshpass:sshpass -V,如果没安装,用包管理器安装(比如Ubuntu:sudo apt install sshpass)

最后提个安全提醒

把密码明文写在脚本里是非常不安全的操作,建议改用SSH密钥认证,这样既不用输入密码,也避免了密码泄露的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:49:40