ssh、scp、tclを使用してリモートでバックアップを作成します。 いくつかの方法

バックアップは必要なものです。 意地悪の法則がトリガーされ、多くの予防的瞬間にもかかわらず情報が失われ、バックアップがなければ復元に多くの時間がかかる可能性があるときに、特にこれを理解します。

この記事は主にプログラマを対象としていますが、管理者が自分自身でいくつかの有用な情報を引き出すことも可能です。

課題は、情報が頻繁に更新される1つ以上のサーバーがあることです。 この情報は、1つの「メイン」サーバーに定期的にバックアップする必要があります。 これを行うには、メインサーバーに配置するスクリプトを作成します。スクリプトは、各サーバーに自動的に接続してバックアップを作成し、アーカイブし、SCPファイルを安全にコピーするためのプロトコルを使用してメインサーバーにバックアップアーカイブをコピーします。

それでは、スクリプトに移りましょう。



最初の方法



これはシェルスクリプトです-SSHを使用したパスワードなしのリモートキーエントリの原則を使用します(ssh-id経由)。 この記事では、 このような接続を構成する方法を読むことができます。



最初のスクリプト:



#!/bin/bash



DST_IPADDR=91.214.132.14

DST_LOGIN=root



BACKUPDIRS="/home/test1 /home/test2"

TMPDIR="/home/"

timestamp=`date "+%Y_%m_%d"`



err() { echo -e "* Error: $1"; exit 1; }



ssh $DST_LOGIN@$DST_IPADDR 'tar -zcvf '$TMPDIR$DST_IPADDR'_'$timestamp'.tar.gz '$BACKUPDIRS || err "Remote connection failed"

scp $DST_LOGIN@$DST_IPADDR:${TMPDIR}${DST_IPADDR}_${timestamp}.tar.gz ./

ssh $DST_LOGIN@$DST_IPADDR 'rm -f '$TMPDIR$DST_IPADDR'_'$timestamp'.tar.gz' || err "Remote connection failed"








このスクリプトは、sshを介してリモートサーバーに接続し、バックアップを作成し、メインサーバーで上書きしてから、リモートサーバーで作成したバックアップを削除します。



第二の方法



この原則に基づいて動作します-TCL言語を使用したサーバーへのリモート接続。

何らかの理由で、SSHを使用して(キーによる)パスワードなしのエントリを作成できない場合に使用できます。

ここで、ログインデータは、リモートサーバーだけでなく、メインサーバーにも必要です。メインサーバーへの後続のバックアップコピーのために、



2番目のスクリプト:



#!/usr/bin/expect -f

set timeout 100

set SELFPASS "mypassword"

set SELFUSER "root"

set SELFIP "91.214.132.13"

set SELFDIR "/home/backup5"



set PASS "remotepassword"

set USER "root"

set IPSERV "91.214.132.14"

set BackupDirectories "/home/test1 /home/test2"

set TMPDIR "/home/backup5"



spawn ssh $USER@$IPSERV

expect "assword:"

send "$PASS\r"

expect "#"

send "tar -zcvf $TMPDIR/backup.tar.gz $BackupDirectories\r"

expect "#"

send "scp -r $TMPDIR/backup.tar.gz $SELFUSER@$SELFIP:$SELFDIR/\r"

expect {

-re ".*Are.*.*yes.*no.*" {

send "yes\r"

exp_continue

#look for the password prompt

}

"assword:" {

send "$SELFPASS\r"

#he expect command will now return

}

}



send "exit;\r"

expect eof









このスクリプトは、tcl言語を使用してリモートサーバーに接続します。expectコマンド(メソッド)は、リモートサーバーからの応答を期待してアルゴリズムを段階的に実行するためのメソッドです。 次に、バックアップを作成し、同じscpプロトコルを使用してメインサーバーにコピーします。 このスクリプトでは、サーバー上で追加のtcl(expect)パッケージをより細かくデバッグおよび構成する必要があります。 しかし、それにもかかわらず彼は彼のパフォーマンスで興味深いです 一般に、サーバーとのリモート作業の追加機能を示します。



これらのスクリプトも改善できます。 たとえば、データベースバックアップの作成(1行で行われます)を追加して、スクリプトが複数の異なるサーバーからバックアップを自動的に(順次)作成するようにします。これは既に要求されています。 また、クラウンを使用してこのスクリプトの起動を処方する価値があります。これにより、特定の時間が経過するとバックアップが自動的に作成されます。



PSいつも新しいバックアップがあればいいのに!



All Articles