非常に奇妙な問題があります。 2台のサーバーがあります。つまり、daytona
RAIDアレイを持つストレージサーバーとして使用されます。バックアップしたい時に音を鳴らします。 2番目のサーバーはtestarossa
私のサービスを実行します。私は日常的な二重性を使用して後者をバックアップしたいと思います。どちらのシステムも完全に最新のUbuntu Server 14.04を実行しています。
マシンにWOLスクリプトを作成した後、毎日決められた時間に二重バックアップを実行しました。
バックアップスクリプトのインポート部分は以下のとおりです。バックアップはroot
on ユーザーとして実行され、testarossa
SSH バックアップは on を通じて実行されます。次に user on を使用して閉じます。backupper
daytona
ssh
christophe
daytona
と使用testarossa
できるようにSSHキーを設定しました。スクリプトでコマンドをうまく実行でき、シェル()でもスクリプトを実行できます。daytona
backupper
christophe
./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-openssl
cronjobが正常に実行されました。しかし、もはやそうではありません。
これをデバッグする方法がわかりません。修正できる経験が少なすぎます。どんなアドバイス?
スクリプト
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クラッシュ