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

树莓派Crontab执行Rsync自动上传脚本失败及密钥验证问题

解决crontab调用rsync时的Host key verification failed问题

问题根源是:你用sudo crontab -e配置的任务是以root用户身份运行的,而root用户的~/.ssh/known_hosts文件里没有目标SFTP服务器的主机密钥,导致SSH连接时验证失败;但你手动运行脚本用的是普通用户,该用户的known_hosts已经通过之前的手动连接记录了服务器密钥,所以能正常执行。

以下是几种解决方法:

方法1:手动以root身份接受服务器密钥

执行以下命令,手动建立一次root用户到目标服务器的SSH连接,接受主机密钥:

sudo ssh host.com

当出现Are you sure you want to continue connecting (yes/no/[fingerprint])?提示时,输入yes并回车,之后可以输入exit退出连接。此时root用户的/root/.ssh/known_hosts会自动添加服务器的密钥,crontab任务就能正常运行了。

方法2:自动写入服务器密钥到root的known_hosts

如果不想手动交互,可以直接用ssh-keyscan获取服务器密钥并追加到root的known_hosts文件:

sudo sh -c 'ssh-keyscan host.com >> /root/.ssh/known_hosts'

注意:如果服务器有多个IP或主机别名,可以把所有需要的地址都加进去,比如ssh-keyscan host.com 192.168.1.100 >> /root/.ssh/known_hosts

方法3:改用SSH密钥对(更安全,推荐)

用sshpass明文写密码存在安全风险,建议改用SSH密钥对认证,彻底解决密码和密钥验证问题:

  1. 以root身份生成SSH密钥对(一路回车使用默认设置即可):
    sudo ssh-keygen -t rsa
    
  2. 将root的公钥复制到目标SFTP服务器:
    sudo ssh-copy-id host.com
    
    按提示输入目标服务器的密码,完成公钥复制。
  3. 修改你的upload.sh脚本,去掉sshpass部分,简化为:
    #!/bin/bash
    rsync -avh -e ssh /local/directory host.com:/remote/directory
    

完成以上任意一种方法后,重新触发crontab任务测试即可生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:00:57