読者です 読者をやめる 読者になる 読者になる

rsync

Linux/UNIX CheetSheet

ピンポイントで必要なところだけメモ。
基本形

# 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にエラーメッセージが出力されていることも学ぶ。

以下のリンクを参考にした。

11/15 追記
以下は必ずしも必要ない。
リモートホストにおいて、鍵認証とルートログインを許可するように/etc/ssh/sshd_configを編集

PasswordAuthentication no
PermitRootLogin yes
# /etc/rc.d/init.d/sshd restart