スクリプト

スクリプト

非常に奇妙な問題があります。 2台のサーバーがあります。つまり、daytonaRAIDアレイを持つストレージサーバーとして使用されます。バックアップしたい時に音を鳴らします。 2番目のサーバーはtestarossa私のサービスを実行します。私は日常的な二重性を使用して後者をバックアップしたいと思います。どちらのシステムも完全に最新のUbuntu Server 14.04を実行しています。

マシンにWOLスクリプトを作成した後、毎日決められた時間に二重バックアップを実行しました。

バックアップスクリプトのインポート部分は以下のとおりです。バックアップはrooton ユーザーとして実行され、testarossaSSH バックアップは on を通じて実行されます。次に user on を使用して閉じます。backupperdaytonasshchristophedaytona

と使用testarossaできるようにSSHキーを設定しました。スクリプトでコマンドをうまく実行でき、シェル()でもスクリプトを実行できます。daytonabackupperchristophe./script.sh

次のコマンドを使用してcronjobsにスクリプトを追加しました。

0 10  * * * /bin/bash /root/scripts/dailybackup >> /var/log/backup.daily.log 2>&1

cronjobが実行されるたびに、次のエラーが発生します。

BackendException: ssh connection to [email protected]:22 failed: [Errno 111] Connection refused

提案してみ#ubuntu-serverましたが、echo "" | nc 192.168.1.120 22次のエラーが返されます。

SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3
Protocol mismatch.

これにより、私はアップグレードする必要があると確信し、daytonaそうしました。パッケージがアップグレードされ、gnu-opensslcronjobが正常に実行されました。しかし、もはやそうではありません。

これをデバッグする方法がわかりません。修正できる経験が少なすぎます。どんなアドバイス?

スクリプト

serverip=192.168.1.120
servermac=14:DA:E9:4C:6E:17
attempts=50
sourcedir="/"
targetdir="sftp://[email protected]//mnt/raidarr0/backups/testarossa/duplicity/daily"
encryptkey="AC7A8F8C"
keep="1M"
sudouser="christophe" 
fullbackup=""

## Load in the passphrase file env variable
. /root/.passphrase
export PASSPHRASE

## Do the snapshot backup
if [ "$fullbackup" == "full" ]; then
    $(which duplicity) full --encrypt-key "$encryptkey" --exclude /srv --exclude /usr --exclude /cdrom --exclude /lib64 --exclude /bin --exclude /sbin --exclude /boot   --exclude /dev --exclude /proc --exclude /sys --exclude /tmp --exclude /run --exclude /mnt --exclude /media --exclude /lost+found "$sourcedir" "$targetdir"
else
    $(which duplicity)      --encrypt-key "$encryptkey" --exclude /srv --exclude /usr --exclude /cdrom --exclude /lib64 --exclude /bin --exclude /sbin --exclude /boot   --exclude /dev --exclude /proc --exclude /sys --exclude /tmp --exclude /run --exclude /mnt --exclude /media --exclude /lost+found "$sourcedir" "$targetdir"
fi

echo "Backup to target completed."

## Remove older backups. We only want to backup 30 days. 
# (We have a full every month)
$(which duplicity) remove-older-than "$keep" --force "$targetdir"
echo "Removal of stale backups completed"
## Shut down the machine using a sudo account. Expects the user to have a key installed for this.
ssh "$sudouser"@"$serverip" "sudo shutdown -h now"
echo "Shutdown command issued to remote machine"

フォローアップ:

1)このスクリプトには、ホストがpingが可能になるのを待つ機能があります。したがって、ホストが完全に起動した後にのみバックアップを開始します。 (このスクリプトは、Debianがインストールされている他のコンピュータで1年以上実行されています。)

2)スクリプトはルートシェルで正しく実行されます。

3) いいえ、両方の設定ファイルにプロキシコマンドがありません。

4)runコマンドを使用してみたsudo /bin/bash /root/scripts/dailybackupところ、何らかの理由でホスト(使用済みyes/no)の信頼性を確認するように求められます。今、二重性コマンドは私のknown_hostsファイルを使用していないようですか?

答え1

「プロトコルの不一致」エラー。簡単です。 nc は、リモートアドレスとポートに接続するために SSH プロトコルを使用しません。

実際の質問に関して、バックアップユーザーはSSHキーを介して接続しますか?では、鍵はどこに保存されていますか?

私の考えで何が起こっているのかは、root以外のユーザーでスクリプトをテストしているということです。

次のようにrootでスクリプトを実行して、失敗することを確認してください。

sudo /bin/bash /root/scripts/dailybackup

他の人も同じエラーが発生するためIPクラッシュ

関連情報