itochin2の日記(仮)

主に備忘録。Perl、MySQL、Unity、開発管理などについて情報を残していきたい。

多段SSHを利用したrsyncのスクリプト

macから開発サーバーにファイルをupする時、FileZillaを使っていたけど
rsyncでなんとかならんかなーと思ってスクリプトにした。

前提条件

開発サーバーは踏み台経由でないとアクセスできないので、
sshでトンネル張ってアクセスしている。

トンネルを張ったときの模様

ローカルの10022番ポートにアクセスすると、test_sv経由でtest_sv02に転送される的な。

踏み台サーバー
 ユーザー名:test
 ホスト名:test_sv
 パスワードは鍵登録しているのでスキップ
開発サーバー
 ユーザー名:itou
 ホスト名:test_sv02
 パスワードは鍵登録しているのでスキップ

$ ssh -N -f -L 10022:test_sv02:22 test@test_sv

そして作ったスクリプト

#!/bin/sh

OPTION="-auvzb --delete"
EXCLUDE_FILE="/Users/itochin/work/exclude.txt"
BASE_SOURCE="/Users/itochin/work/develop/sample_project"
BASE_DEST="/home/itou/sample_project"

USER="itou"
HOST="localhost"

rsync $OPTION --exclude-from=$EXCLUDE_FILE -e 'ssh -p 10022' $BASE_SOURCE $USER@$HOST:$BASE_DEST

実行されるコマンド

rsync -auvzb --delete --exclude-from=/Users/itochin/work/exclude.txt -e ssh -p 10022 /Users/itochin/work/develop/sample_project itou@localhost:/home/itou/sample_project

ポイント1

-e ssh -p 10022

rsyncsshを使う場合は、「-e ssh
なおかつ、ポート指定が必要な場合は「-p ポート番号」

ポイント2

--exclude-fromオプション

「--exclude」で除外指定できるのはフォルダのみ。
除外ファイルを指定したい場合は「--exclude-from」で除外リストを指定する。
この事実を知らなくて詰まった。

以下は除外リストの内容

.DS_Store
Thumb.db
.svn
log
.git
tmp

その他

「--include」「--exclude」の指定に順番があるそうなので
スクリプト改修の際は注意が必要になることを覚えておく。



FileZillaがあんまり使い勝手良くなかったから、これで作業も捗る。
手動による漏れもなくなるし。
サーバー入ってvimでやれよって話も。