誰もつまづかないっぽいので自分専用のメモ
接続元ホスト名: from-host
接続先ホスト名: to-host
目的1: ssh で公開鍵認証する
目的2: rsync で定期バックアップする
作成 2009.12.28
更新 2016.03.10
更新 2016.03.10
rsync openssh cron 自動バックアップ構築メモ
まえおき
なお、以下のオペレーションは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-copy-id を使います。
秘密鍵は ~/.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 のコマンドラインオプションのうち主に使用するものを紹介します。
注意 --backup-dir で指定したディレクトリはコピー先に作成されます。
注意 コピー元で "*" を使用していると --delete の記述は無効になります。
-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 です。
操作方法は 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-------) になります。
より厳密に確認するには、
- /etc/ssh/sshd_config の SyslogFacility を確認する。デフォルトは AUTHPRIV です。
- /etc/syslog.conf で sshd_config に記述されていたファシリティがどのファイルに記録されるか確認する。デフォルトは authpriv.* /var/log/secure です。
- ログを確認する
# 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
などのログが記録されます。