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

SSH主机密钥正常但Rsync脚本执行失败:主机密钥验证错误

解决rsync脚本报错Host key verification failed的问题

我之前也踩过这个坑!你遇到的问题本质是脚本运行的上下文和你手动SSH时的环境不一致,导致rsync调用的SSH找不到正确的主机密钥配置。下面是一步步的排查和解决方法:

  • 检查脚本运行的用户身份
    手动SSH时你用的是当前登录的用户(比如ubuntu),但脚本可能是用root或者其他用户运行的(比如通过cron定时任务)。不同用户的~/.ssh/known_hosts文件是独立的,脚本用户的这个文件里没有目标服务器的主机密钥,就会触发验证失败。
    解决方法:

    1. 切换到脚本运行的用户,手动SSH一次目标服务器并接受密钥:
      sudo -u 脚本运行用户名 ssh user@远程服务器IP
      
    2. 或者直接在rsync命令里指定手动操作时的known_hosts路径:
      rsync -avz -e "ssh -o UserKnownHostsFile=/home/你的手动登录用户名/.ssh/known_hosts" user@远程服务器IP:/备份路径 /本地存储路径
      
  • 确保脚本使用正确的SSH密钥
    如果手动SSH时你指定了特定的密钥文件(比如~/.ssh/id_rsa_backup),但脚本里没配置这个,也可能间接导致密钥验证报错。
    解决方法:在rsync的SSH参数里同时指定密钥和known_hosts文件:

    rsync -avz -e "ssh -i /home/你的手动登录用户名/.ssh/id_rsa_backup -o UserKnownHostsFile=/home/你的手动登录用户名/.ssh/known_hosts" user@远程服务器IP:/备份路径 /本地存储路径
    
  • 处理cron环境的特殊情况
    如果脚本是通过cron定时运行的,cron的环境变量和你登录shell的环境差异很大,可能找不到SSH的配置目录。
    解决方法:

    1. 在脚本开头添加环境变量配置:
      export HOME=/home/你的手动登录用户名
      export PATH=/usr/bin:/bin:/usr/sbin:/sbin
      
    2. 或者在cron任务里使用完整的命令路径,比如:
      0 2 * * * /usr/bin/rsync -avz -e "ssh -o UserKnownHostsFile=/home/你的手动登录用户名/.ssh/known_hosts" user@远程服务器IP:/备份路径 /本地存储路径
      
  • 预加载主机密钥到脚本用户的known_hosts
    可以在脚本开头加入自动扫描并添加主机密钥的命令,避免手动操作:

    # 提前将目标服务器的主机密钥添加到脚本用户的known_hosts
    ssh-keyscan -H 远程服务器IP >> /home/脚本运行用户名/.ssh/known_hosts
    

核心逻辑就是:脚本运行时的用户、环境变量和你手动操作时不匹配,导致SSH无法读取到已经验证过的主机密钥。只要对齐这两者的上下文,问题就能解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:36:41