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

远程SSH执行rsync命令失败:sh: rsync: not found 错误求助

解决SSH远程执行rsync提示"sh: rsync: not found"的问题

核心原因

远程通过SSH执行命令时,默认启动的是非交互式非登录shell,不会加载本地登录时的完整环境变量配置,导致PATH中缺少rsync的安装路径——这就是本地能执行、远程SSH调用就报错的根本原因。之前指定--rsync-path没生效,大概率是参数用法错误或路径不准确。

可行解决方案

1. 先确认rsync的真实路径

在远程服务器本地执行以下命令,拿到rsync的绝对路径:

which rsync

比如得到/usr/local/bin/rsync或/usr/bin/rsync,后续命令里用这个真实路径。

2. 直接用绝对路径调用rsync

把rsync的绝对路径写进SSH命令里,同时注意变量展开的时机:

  • 如果$SRC_DIR和$BUILD_DIR是远程服务器上的环境变量,用单引号包裹命令,避免本地shell提前解析变量:
    ssh root@"$build_server" '/usr/local/bin/rsync -avzh $SRC_DIR/main $BUILD_DIR || exit 1'
    
  • 如果这两个变量是Jenkins本地的变量,用双引号让本地先展开变量,再传递到远程:
    ssh root@"$build_server" "/usr/local/bin/rsync -avzh $SRC_DIR/main $BUILD_DIR || exit 1"
    

3. 让远程shell加载完整环境

如果不想写绝对路径,可以强制远程shell以登录模式启动,加载/etc/profile或~/.bash_profile这类配置文件,补全PATH:

ssh root@"$build_server" 'bash -l -c "rsync -avzh $SRC_DIR/main $BUILD_DIR || exit 1"'

4. 修正--rsync-path的用法

--rsync-path是用来指定远程端rsync的路径,必须放在rsync命令的参数位置里,正确写法如下:

ssh root@"$build_server" "rsync -avzh --rsync-path=/usr/local/bin/rsync $SRC_DIR/main $BUILD_DIR || exit 1"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:58:20