多段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
ポイント2
--exclude-fromオプション
「--exclude」で除外指定できるのはフォルダのみ。
除外ファイルを指定したい場合は「--exclude-from」で除外リストを指定する。
この事実を知らなくて詰まった。
以下は除外リストの内容
.DS_Store
Thumb.db
.svn
log
.git
tmp
その他
「--include」「--exclude」の指定に順番があるそうなので
スクリプト改修の際は注意が必要になることを覚えておく。
FileZillaがあんまり使い勝手良くなかったから、これで作業も捗る。
手動による漏れもなくなるし。
サーバー入ってvimでやれよって話も。