= rsync = {{{ $ rsync -PSavz --delete -bwlimit=500 -e "ssh -i ~/.ssh/mirror_data" mirror@remote:. }}} == オプション * P: 転送を中断した場合、ファイルを保持(--partial)、進捗情報を表示(--progress) * S: sparseファイルのコピーを効率化する。 * a: アーカイブモード。ユーザやパーミッションなどを同じにしてミラー * v: verbose。詳細なログ表示 * z: 圧縮 * delete: srcからファイルが削除された場合、同期先のファイルも削除する == セキュリティの強化 == rsyncの実行のみリモートユーザに許可して、セキュリティを強化することができる。 === 鍵作成 === {{{ [root@desthost ~]# ssh-keygen -f rsynckey -t rsa -b 4096 -C "youname@hoge.com" Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in rsynckey. Your public key has been saved in rsynckey.pub. The key fingerprint is: SHA256:UEcdnGoXW4E6jyjBkm71U1bbyx2mVj1T6q4tCkal7eo youname@hoge.com The key's randomart image is: +---[RSA 4096]----+ | ..oo.+.. | | . . B . .| | o. .+ * .o| | o +. +B + o*.| | . o oS=.= o+o+| | o ..+.. .o+ .| | . .o.. .. | | . o ... | | .E ...o. | +----[SHA256]-----+ [root@desthost ~]# ls anaconda-ks.cfg rsynckey rsynckey.pub }}} == バックアップ元に鍵を配置 SSHでログインできるようにする。 {{{ [root@srchost ~]# adduser rsync-user [root@srchost ~]# cd /home/rsync-user/ [root@srchost rsync-user]# mkdir .ssh [root@srchost rsync-user]# chmod 700 .ssh/ [root@srchost rsync-user]# mv /root/rsynckey.pub .ssh/authorized_keys [root@srchost rsync-user]# chown rsync-user.rsync-user -R .ssh/ [root@srchost rsync-user]# restorecon -R .ssh/ }}} == バックアップ先 鍵認証でログインできるか確認確認 {{{ [root@desthost ~]# ssh -i rsynckey rsync-user@192.168.1.155 [rsync-user@srchost ~]$ }}} == 鍵認証でrsyncが動作するか確認 {{{ [root@desthost ~]# sync -vvv -PSavz --delete --bwlimit=500 -e "ssh -i /root/rsynckey" rsync-user@srchost:/var/www/html/mariadb /var/www/html opening connection using: ssh -i rsynckey -l rsync-user srchost rsync --server --sender -vvvlogDtprSze.iLsf --bwlimit=500 . /var/www/html/mariadb receiving incremental file list server_sender starting pid=1439 [sender] make_file(mariadb,*,0) recv_file_name(mariadb) received 1 names ... generate_files finished sent 92 bytes received 6075 bytes 12334.00 bytes/sec total size is 206849027 speedup is 33541.27 [generator] _exit_cleanup(code=0, file=main.c, line=1518): about to call exit(0) }}} == rsyncのみの実行に絞る絞る セキュリティの観点では、sshで全ての実行を可能とするのはよろしくない。sshの接続にのみ絞るには、上記rsyncを実行した結果を利用する。 opening connection using: ssh -i rsynckey -l rsync-user srchost **rsync --server --sender -vvvlogDtprSze.iLsf --bwlimit=500 . /var/www/html/mariadb** == エラー処理について エラー発生時のエラーコード(echo $?)の値は、下記の通り。 * 転送中ののネットワーク切断: 12 * サーバ側rsyncプロセスのクラッシュ: 22 * sshが繋がらない: 255 === ネットワーク切断 {{{ [root@desthost ~]# rsync --timeout 60 -vv -PSavz --delete --bwlimit=500 -e "ssh -i rsynckey" rsync-user@srchost:/var/www/html/mariadb /var/www/html .... [receiver] io timeout after 60 seconds -- exiting set uid of mariadb/rpms/.MariaDB-10.1.29-centos7-x86_64-backup.rpm.NPdON0 from 0 to 48 set gid of mariadb/rpms/.MariaDB-10.1.29-centos7-x86_64-backup.rpm.NPdON0 from 0 to 48 renaming mariadb/rpms/.MariaDB-10.1.29-centos7-x86_64-backup.rpm.NPdON0 to mariadb/rpms/MariaDB-10.1.29-centos7-x86_64-backup.rpm rsync error: timeout in data send/receive (code 30) at io.c(140) [receiver=3.0.9] [receiver] _exit_cleanup(code=30, file=io.c, line=140): about to call exit(30) rsync: connection unexpectedly closed (82 bytes received so far) [generator] rsync error: error in rsync protocol data stream (code 12) at io.c(605) [generator=3.0.9] [generator] _exit_cleanup(code=12, file=io.c, line=605): about to call exit(12) [root@localhost ~]# echo $? 12 }}} === ssh不通 {{{ [root@localhost ~]# rsync --timeout 60 -vv -PSavz --delete --bwlimit=500 -e "ssh -i rsynckey" rsync-user@srchost:/var/www/html/mariadb /var/www/html opening connection using: ssh -i rsynckey -l rsync-user srchost rsync --server --sender -vvvlogDtprSze.iLsf --timeout=60 --bwlimit=500 . /var/www/html/mariadb ssh: connect to host srchost port 22: No route to host rsync: connection unexpectedly closed (0 bytes received so far) [Receiver] rsync error: unexplained error (code 255) at io.c(605) [Receiver=3.0.9] [Receiver] _exit_cleanup(code=12, file=io.c, line=605): about to call exit(255) [root@localhost ~]# echo $? 255 }}} === rsyncプロセスの死亡 {{{ rsync: connection unexpectedly closed (9162874 bytes received so far) [receiver] set uid of mariadb/rpms/.MariaDB-10.1.29-centos7-x86_64-backup.rpm.ipt9fC from 0 to 48 set gid of mariadb/rpms/.MariaDB-10.1.29-centos7-x86_64-backup.rpm.ipt9fC from 0 to 48 renaming mariadb/rpms/.MariaDB-10.1.29-centos7-x86_64-backup.rpm.ipt9fC to mariadb/rpms/MariaDB-10.1.29-centos7-x86_64-backup.rpm rsync error: error in rsync protocol data stream (code 12) at io.c(605) [receiver=3.0.9] [receiver] _exit_cleanup(code=12, file=io.c, line=605): about to call exit(12) rsync: connection unexpectedly closed (82 bytes received so far) [generator] rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(605) [generator=3.0.9] [generator] _exit_cleanup(code=12, file=io.c, line=605): about to call exit(20) [root@localhost ~]# echo $? 20 }}}