リモートバックアップ

ここに書かれたことを実行して、「おいた」にあっても責任は持ちません。あしからず。

目的:サーバのファイルをバックアップする

ネットワークでつながれたサーバをバックアップしたい。
バックアップすべきサーバにはルート権限はない。
バックアップすべきサーバに対してssh、sftp、scpなどは使える。
anonymous ftpディレクトリに置けるようなデータではない。
バックアップデータを保存するサーバのルート権限はある。

というもの。どちらのサーバもLinuxマシン。

解決方法

ssh-agentとkeychainを利用し、cronにより自動でscpする

以下、

と表記する。



手順

クライアントでdsa暗号鍵をつくる

$ cd
$ ssh-keygen -t dsa

パスフレーズを尋ねられるので、入力する。 なお、下のほうの設定で、--clearオプションでkeychainを起動するようにします。 そうするとログインする度に尋ねられます。 このことも念頭においてパスフレーズを決めるたらいかがでしょう。

これで、「~/.ssh」に id_dsa と id_dsa.pub ができる。

$ ls -l .ssh

で確認できる。

ホストにdsa暗号鍵をインストールする

ホストにログイン
$ sftp hohehohe@client.hoge.jp
$ get .ssh/id_dsa.pub offsite.pub
$ cat offsite.pub >> .ssh/authorized_keys
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys
$ rm offsite.pub

ここまではLinuxでのバックアップを自動化するに 従った。 しかし、これ以降はLinuxでのバックアップを自動化するに 書かれたとおりに実行すると ssh-agentのプロセスが消えなかったりするなどの弊害があるので従わないほうがいい。

クライアントに keychain をインストールする(ルート権限が必要)

http://www.gentoo.org/proj/en/keychain.xml から、 keychain-2.6.8-1.noarch.rpm をいただく

$ su 
# gpg --keyserver subkeys.pgp.net --recv-key 20104eb0
# gpg --fingerprint 20104eb0
# gpg --export --armor 20104eb0 > /tmp/20104eb0.pub
# rpm --import /tmp/20104eb0.pub
# rm /tmp/20104eb0.pub
# rpm -K keychain-2.6.8-1.noarch.rpm
# rpm -Uvh keychain-2.6.8-1.noarch.rpm

インストール方法も http://www.gentoo.org/proj/en/keychain.xml に従う

クライアントで ssh-agent、keychain が動くように設定する

.bash_profile に以下を追加する

# .bash_profile
〜〜 略 〜〜
/usr/bin/keychain --clear ~/.ssh/id_dsa  
source ~/.keychain/$HOSTNAME-sh
source ~/.bashrc

ポイント

共通テーマ: OpenSSHキー(鍵)の管理 第2回 を参考にした。 こんな批判的な記事〇〇とssh-agentは使いようもあります

一度ログインしなおす

ログインしたあとにパスフレーズが尋ねられるので、答える
なお、これで、リモートホストにログインせずに入れます
たとえば
$ ssh -l hogehoge host.hoge.jp
であっという間にホストの中

ホストからファイルを scp によりクライアント上に複製するバックアップスクリプトをつくる

これはお好みで。たとえば、こんな感じのスクリプト(backup.sh)をつくる。

#!/bin/sh
source /home/hohehohe/.keychain/$HOSTNAME-sh
cd /home/hohehohe
scp -r hogehoge@host.hoge.jp:backup ./
cd /home/hohehohe/backup/kyoto
find ./ -type f -mtime '+14' -exec rm -f {} \;
$ chomod 700 backup.sh

ポイント

念のためのbackup.shの説明

クライアント上でバックアップスクリプトをcronで定期的に動かす

$ crontab -e

下のように書く

24 1 * * *  /home/hohehohe/backup.sh

確認は

$ crontab -l
13 December 2006

追記

18 July 2007
Today:2Yesterday:0Total:7832 since 13 December 2006

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 18 Jul 2007 (水) 18:45:12 (6125d)