ピンポイントで必要なところだけメモ。
基本形
# rsync [オプション] [コピー元] [コピー先]
オプション
- -a
- アーカイブモード。元のパーミッションやグループなどを保持したまま同期できる。
- -v
- 処理中の経過ファイル名を表示する。-vv, -vvvなど、重ねるほどに表示される情報は詳細になる。
- -t
- ファイルのタイムスタンプを転送先に反映させる。
- --inclulde, --exclude
- コピーするファイルを選択。オプションを指定した順番は関係なく、--include指定されたものは必ずコピー対象となり、--exclude指定されたものはコピー対象とはならない。
- --dry-run
- rsyncコマンドをテストする。
コピー元、コピー先の記法
- [ユーザ名]@[ホスト名 or IPアドレス]:[ディレクトリ]
- ディレクトリの指定
- 最後に「/」がないと、そのディレクトリが丸ごとコピーされる。
- 最後に「/」があると、そのディレクトリ以下のツリーがコピーされる。ディレクトリはコピーされない。こっちを使うようにと覚えておけば変な問題はないと思う。
- 最初に「/」がない場合はカレントからの相対パスではなく、任意のディレクトリになる。
デフォルトでSSHが使われる。
そのためパスワード入力ではなく公開鍵認証を行うように、SSHクライアントをコピー元ホスト、コピー先ホストを設定しておくとよい。
まずSSH鍵を生成。パスフレーズの入力を求められたらEnterキーを押す。つまり設定してはいけない。ここで設定してしまうと、秘密鍵解除のためにパスフレーズを入力しないとならない。
その分、鍵が漏洩しないことが前提だが。
# ssh-keygen -t rsa
~/.sshにid_rsa, id_rsa.pubの2つのファイルが作られる。それぞれ秘密鍵、公開鍵。
公開鍵をリモートホストにコピー。手段はscpでも何でもよい。
# ssh-copy-id -i .ssh/id_dsa.pub user@remote.host.com
リモートホストにおいて、作成して公開鍵を登録。
# cat /home/user/.ssh/id_rsa.pub >> /home/user/.ssh/authorized_keys
リモートホストに対して、rootでsshログインできるか確認。パスワード入力なしでログインできるようであればOK。
# ssh user@remote.host.com
リモートホスト側のパーミッション設定に注意。
ホームディレクトリは755、.sshは700、.ssh/authorized_keysは600にしておく。どうも所有者以外の書き込み権限があるとダメらしい。自分はホームディレクトリのパーミッションで嵌った。。
ちなみにその時、うまくSSH接続できなかった場合、リモートホストの/var/log/secureにエラーメッセージが出力されていることも学ぶ。
以下のリンクを参考にした。
- http://www.itmedia.co.jp/enterprise/articles/0707/19/news059_3.html
- http://www.jitaku-server.net/backup_ssh.html
11/15 追記
以下は必ずしも必要ない。
リモートホストにおいて、鍵認証とルートログインを許可するように/etc/ssh/sshd_configを編集
PasswordAuthentication no PermitRootLogin yes
# /etc/rc.d/init.d/sshd restart