Falha na verificação da chave do host [rsync: conexão inesperadamente fechada]

1

Eu tenho sido preso com um problema peculiar, onde o comando rsync não está sendo executado quando é executado através de crontab.
Abaixo está o código:

#!/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

O rsync acontece quando o código é executado manualmente, mas falha quando é executado através do crontab. Resto dos comandos estão funcionando bem. Nos logs, recebi esta informação:

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]
    
por Rudra 31.01.2013 / 13:16

3 respostas

1

Obrigado a todos .... recebi a resposta finalmente. Quando eu estava correndo manualmente eu estava correndo como um usuário local. Mas, no cron eu estava rodando como usuário root, para o qual a chave ssh não foi gerada. Eu fiz ssh-keygen e criei as chaves. Agora funciona.

    
por 04.02.2013 / 07:08
2

ssh (que rsync executa) não confia na chave do host do servidor e, como não há terminal interativo para avisar o usuário, ele simplesmente falha. Provavelmente, a causa é que ssh está analisando um arquivo known_hosts diferente quando executado no cron quando você o executa manualmente.

Se o cronjob for executado como um usuário diferente de você, você precisará aceitar manualmente a chave do host fazendo algo parecido com isto:

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

Se o cronjob estiver sendo executado como seu usuário, $HOME provavelmente não está configurado corretamente. Especifique isso explicitamente no crontab:

HOME=/home/vishu
    
por 31.01.2013 / 22:40
0

Eu enfrentei um erro semelhante. Isso resolveu meu problema: ssh para hospedar a máquina na qual os dados são migrados com o rsync. Após o qual o IP do host foi permanentemente adicionado à lista de hosts conhecidos.

Em seguida, executei o mesmo comando rsync e ele foi executado muito bem!

    
por 22.03.2017 / 09:30

Tags