主机密钥validation失败

我一直在遇到一个奇怪的问题,那就是在通过crontab执行的时候,rsync命令没有运行。
以下是代码:

#!/bin/sh -x PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/mysql/bin:/opt/android-sdk-linux/tools:/opt/android-sdk-linux/platform-tools:~/usr/lib/jvm/jdk-6/bin /bin/sh /etc/profile MyUSER="root" # USERNAME MyPASS="password" # PASSWORD MyHOST="localhost" # Hostname Password="" #Linux Password MYSQL="$(which mysql)" if [ -z "$MYSQL" ]; then echo "Error: MYSQL not found" exit 1 fi MYSQLADMIN="$(which mysqladmin)" if [ -z "$MYSQLADMIN" ]; then echo "Error: MYSQLADMIN not found" exit 1 fi CHOWN="$(which chown)" if [ -z "$CHOWN" ]; then echo "Error: CHOWN not found" exit 1 fi CHMOD="$(which chmod)" if [ -z "$CHMOD" ]; then echo "Error: CHMOD not found" exit 1 fi GZIP="$(which gzip)" if [ -z "$GZIP" ]; then echo "Error: GZIP not found" exit 1 fi CP="$(which cp)" if [ -z "$CP" ]; then echo "Error: CP not found" exit 1 fi MV="$(which mv)" if [ -z "$MV" ]; then echo "Error: MV not found" exit 1 fi RM="$(which rm)" if [ -z "$RM" ]; then echo "Error: RM not found" exit 1 fi RSYNC="$(which rsync)" if [ -z "$RSYNC" ]; then echo "Error: RSYNC not found" exit 1 fi MYSQLBINLOG="$(which mysqlbinlog)" if [ -z "$MYSQLBINLOG" ]; then echo "Error: MYSQLBINLOG not found" exit 1 fi # Get data in dd-mm-yyyy format NOW="$(date +"%d-%m-%Y-%T")" DEST="/home/db-backup" mkdir $DEST/Increment_backup.$NOW LATEST=$DEST/Increment_backup.$NOW $MYSQLADMIN -u$MyUSER -p$MyPASS flush-logs newestlog=`ls -d /usr/local/mysql/data/mysql-bin.?????? | sed 's/^.*\.//' | sort -g | tail -n 1` echo $newestlog for file in `ls /usr/local/mysql/data/mysql-bin.??????` do if [ "/usr/local/mysql/data/mysql-bin.$newestlog" != "$file" ]; then echo $file echo $Password | sudo -S $CHMOD 0777 $file #sudo $MYSQLBINLOG $file>$file.$NOW.sql $CP "$file" $LATEST #$RM "$file.$NOW.sql" #$MV $file.sql.gz /$LATEST fi done for file1 in `ls $LATEST/mysql-bin.??????` do $MYSQLBINLOG $file1>$file1.$NOW.sql $GZIP -9 "$file1.$NOW.sql" $RM "$file1" done $RSYNC -v -e ssh $LATEST [email protected]:/home/rsync-backup/ #FILE=$LATEST/"mysql-bin.??????" #$MYSQLBINLOG $FILE>$FILE.$NOW.sql #$GZIP -f "$FILE.$NOW.sql" pwd 

Rsync是在手动运行代码时发生的,但是在通过crontab运行时会失败。 其余的命令工作正常。 从日志中我得到这些信息:

 Host key verification failed.^M rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(600) [sender=3.0.6] 

sshrsync执行的)不信任服务器的主机密钥,并且由于没有交互式terminal来提示用户,所以简单地失败了。 原因可能是ssh在cron下运行时正在查看不同的known_hosts文件,当您手动执行它时。

如果cronjob以不同的用户身份运行,则需要通过执行如下操作来手动接受主机密钥:

 sudo -u cronuser HOME=/home/cronuser ssh [email protected] 

如果cronjob以用户身份运行,则$HOME可能设置不正确。 在crontab中明确指定:

 HOME=/home/vishu 

谢谢大家….终于有了答案。 当我手动运行时,我以本地用户身份运行。 但是,在cron上,我以root用户身份运行它,因为没有生成ssh密钥。 我做了ssh-keygen并创build了密钥。 现在起作用了。

我面临类似的错误。 这解决了我的问题:ssh到主机使用rsync迁移数据的机器。 之后,主机IP永久添加到已知主机的列表中。

接下来我运行了相同的rsync命令,并且执行得很好!