作成 2009.12.28
更新 2016.03.10
rsync openssh cron 自動バックアップ構築メモ
目次
まえおき
RPM からインストール
接続元の設定
接続先の設定
rsync でバックアップ
cron で定期実行する
FAQ
まえおき
誰もつまづかないっぽいので自分専用のメモ
接続元ホスト名: from-host
接続先ホスト名: to-host
目的1: ssh で公開鍵認証する
目的2: rsync で定期バックアップする
なお、以下のオペレーションはroot権限で実行するものです。
# command
以下のオペレーションはユーザー権限で実行するものです。
$ command
以下の記述はファイルの内容を指しています。
# comment ここの行はなくてもかまいません
setting=value
RPM からインストール
まあ、この辺は普通に。たいていは既にインストール済みのはず。
# yum install rsync openssh-server openssh-clients vixie-cron
# service sshd start
接続元の設定
パスフレーズを入れずに作成します。
秘密鍵は ~/.ssh/id_rsa
公開鍵は ~/.ssh/id_rsa.pub
にそれぞれ保存されます。
$ ssh-keygen -t rsa
Generatingpublic/private rsa key pair.
Enter file in which to save the key (/home/testuser/.ssh/id_rsa):
Created directory '/home/testuser/.ssh'.Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/testuser/.ssh/id_rsa.
Your public key has been saved in /home/testuser/.ssh/id_rsa.pub.
The key fingerprint is:
aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa:aa testuser@from-host.upken.jp
接続元で生成した公開鍵を接続先にコピーします。
通常は ssh-copy-id を使います。
$ ssh-copy-id to-host
testuser@to-host's password:
Now try logging into the machine, with "ssh 'to-host'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.
もしこのコマンドがつかえな場合は scp を使うのが手軽でしょう。
$ scp ~/.ssh/id_rsa.pub to-host:from-host.id_rsa.pub
testuser@to-host's password:
id_rsa.pub 100% 232 0.2KB/s 00:00
接続先の ~/.ssh/authorized_keys に接続元の公開鍵を追加します。
所有者とアクセス権に注意してください。
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ cat ~/from-host.id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
接続先の設定
この時点で接続元からsshで接続テストします。 うまくいったらパスワード入力が不要になって、以下のような感じになるはずです。
$ ssh to-host
Last login: Thu Apr 12 15:49:46 2007 from from-host.upken.jp
接続先のサーバの設定を変更します。 /etc/ssh/ssh_config と間違えないよう気を付けてください。 この3行以外すべてデフォルトです。

/etc/ssh/sshd_config

Protocol 2
PasswordAuthentication no
PermitRootLogin no
サービスを再起動します。
# service sshd restart
rsync でバックアップ
rsync のコマンドラインオプションのうち主に使用するものを紹介します。
-a: アーカイブモード。そのままコピー
-b: バックアップモード。
-e SHELL: リモートシェルを指定する。
-v: 冗長表示
-z: 通信中のデータ圧縮
--backup-dir=DIR: 既存ファイルのバックアップ先
--delete: 送信元に無いファイルを削除する。
rsync でコピーするときにコピー先にファイルがあると --backup-dir で指定したディレクトリに移動した後にコピーします。
注意 --backup-dir で指定したディレクトリはコピー先に作成されます。
注意 コピー元で "*" を使用していると --delete の記述は無効になります。
$ rsync -avzb --backup-dir=/home/testuser/backup --delete -e ssh /data/ to-host:/data/
SSH のポートを10022へ変更している場合は以下のように指定します。
$ rsync -avzb --backup-dir=/home/testuser/backup --delete -e "ssh -p 10022" /data/ to-host:/data/
cron で定期実行する
crontab -e で編集します。
操作方法は vi です。
分 時 日 月 週 コマンド
# 実行結果のメール送信先
# 送信先を指定しない場合は "" を設定する
MAILTO=backupuser
#
# 月曜~金曜の毎日0時5分に実行する
5 0 * * 1-5 rsync -avzb --backup-dir=/home/testuser/backup --delete -e ssh /data/ to-host:/data/
# 偶数日の8時に実行する
0 8 */2 * * command_line
# 1日と15日の8時に実行する
0 8 1,15 * * command_line
FAQ
こんなエラーが出てログオンできません
Permission denied (publickey,gssapi-with-mic)
よくあるのは ~/.ssh と ~/.ssh/authorized_keys のアクセス権です。 それぞれ、700 (drwx------) と 600 (-rw-------) になります。
より厳密に確認するには、
  1. /etc/ssh/sshd_config の SyslogFacility を確認する。デフォルトは AUTHPRIV です。
  2. /etc/syslog.conf で sshd_config に記述されていたファシリティがどのファイルに記録されるか確認する。デフォルトは authpriv.* /var/log/secure です。
  3. ログを確認する
    # tail -f /var/log/secure
    
    で確認します。前述のアクセス権の場合は
    Authentication refused: bad ownership or modes for directory /home/username/.ssh
    
    とか
    Authentication refused: bad ownership or modes for directory /home/username/.ssh/authorized_keys
    
    などのログが記録されます。
タグ: Linux Backup

©2004-2017 UPKEN IPv4