RemoteBackup - Tomaru's Wiki

65bb

## リモートバックアップ †

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

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

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

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

### 解決方法 †

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

以下、

バックアップすべきサーバを「ホスト」
バックアップデータを保存するサーバを「クライアント」

と表記する。

リモートバックアップ

目的：サーバのファイルをバックアップする
解決方法
手順

クライアントでdsa暗号鍵をつくる
ホストにdsa暗号鍵をインストールする
クライアントに keychain をインストールする（ルート権限が必要）
クライアントで ssh-agent、keychain が動くように設定する
一度ログインしなおす
ホストからファイルを scp によりクライアント上に複製するバックアップスクリプトをつくる
クライアント上でバックアップスクリプトをcronで定期的に動かす

追記

### 手順 †

#### クライアントで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

ポイント

--clearを入れておく。これによりログインのときに私有鍵がフラッシュされる。［ログアウトのときには私有鍵はフラッシュされないので、cronは動いているssh-agentを使ってリモートホストにログインできる］

--clearがないと、そのユーザとしてログインすれば、リモートホストに自由に入れてしまうので、セキュリティ上あまりよろしくない。パスフレーズを知らなくてもssh-agentが知っているから。［とはいえ、ログアウトしてもssh-agentは動き続けているので安全じゃなかろうという批判もできる］

下の紹介記事では、~/.keychain/$HOSTNAME-sh ではなく、~/.ssh-agentとなっているのですが、今回インストールしたkeychainは違うようです［このために時間がかかってしまった……］

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

#### 一度ログインしなおす †

ログインしたあとにパスフレーズが尋ねられるので、答える

これで、ssh-agentが動き、プロセスIDなどが./keychain/$HOSTNAME-sh に記録される

ログインするたびにパスフレーズを尋ねられる（--clearオプションのため）のでわずらわしいのですが（パスワードがふたつに増えた気分になる……）、仕方がないとあきらめる

なお、これで、リモートホストにログインせずに入れます
たとえば
$ 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

ポイント

source ~/.keychain/$HOSTNAME-sh を入れる。
入れておかないと、cronから起動されたプロセスがちゃんとssh-agentを使えない（パスフレーズがわからん、という。プロセスIDがわからないとcronはssh-agentを使えない）

念のためのbackup.shの説明

ホストの~/backupディレクトリをそっくり、クライアントのホームディレクトリにコピー
~/backup/kyotoにコピーしたファイルのうち、14日以上古いものを削除

ある日付より以前に作成されたファイルを削除したい
を参考にした

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

$ crontab -e

下のように書く

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

確認は

$ crontab -l

毎日1時24分に、backup.shが動く

13 December 2006

### 追記 †

マシンをリスタートすると、（考えてみれば当然なのですが）./keychain/$HOSTNAME-sh にはプロセスIDなどが記録されていません。そこで、ログインしないでいると、サーバのファイルをバックアップすることができません。リモートサーバにログインできなくなってしまうためです。停電などでマシンがリスタートするような事態になったときは、ログインをお忘れなく。

18 July 2007

Today:3 Yesterday:2 Total:7788 since 13 December 2006

Last-modified: 18 Jul 2007 (水) 18:45:12 (6072d)

Link: MenuBar(772d)