リモートサーバーとローカル環境を同期する際、rsync
は非常に便利なコマンドです。ただし、リモート接続がパスワード認証の場合、毎回パスワードを入力するのは手間がかかります。この記事では、Macで sshpass
を使い、パスワード認証の rsync
を自動化する方法を紹介します。
前提条件
- Mac を使用している
- Homebrew がインストール済み
rsync
と SSH の基本的な知識がある
1. sshpass のインストール
macOS では公式の Homebrew リポジトリには含まれていないため、以下のように tap を追加してインストールします。
brew install hudochenkov/sshpass/sshpass
インストールが完了すると、/opt/homebrew/bin/sshpass
にコマンドが配置されます。
2. 自動同期用のシェルスクリプトを作成
以下はローカルディレクトリを複数のリモートサーバー上の WordPress テーマディレクトリに同期する例です。
#!/bin/bash
# パスワードをここに設定(セキュリティには注意)
PASSWORD="your_password_here"
# 同期ログ開始
echo "開始:ローカル → リモートへの同期"
# site1.example.com
sshpass -p "$PASSWORD" rsync -avz --delete --exclude='.DS_Store' \
/Users/username/projects/site1_theme/ \
user@site1.example.com:/var/www/site1/wp-content/themes/site1_theme/
# site2.example.com
sshpass -p "$PASSWORD" rsync -avz --delete --exclude='.DS_Store' \
/Users/username/projects/site2_theme/ \
user@site2.example.com:/var/www/site2/wp-content/themes/site2_theme/
# site3.example.com
sshpass -p "$PASSWORD" rsync -avz --delete --exclude='.DS_Store' \
/Users/username/projects/site3_theme/ \
user@site3.example.com:/var/www/site3/wp-content/themes/site3_theme/
echo "同期完了"
このスクリプトは、ローカルの複数の WordPress テーマを、それぞれ対応するリモート環境に上書き同期します。
3. 実行権限を付与して実行
保存したスクリプトに実行権限を与えます。
chmod +x sync_themes.sh
./sync_themes.sh
初回実行時には、接続確認のため yes/no
を求められることがあります。yes
を入力すれば、次回からは表示されません。
4. セキュリティ上の注意点
PASSWORD
をスクリプト内に平文で記述するため、第三者に見られない場所にのみ設置してください。- スクリプトファイルのパーミッションを制限しておきましょう:
chmod 600 sync_themes.sh
- バージョン管理(Git)には含めないように
.gitignore
に追加してください。
まとめ
sshpass
を使うと、パスワード認証でも非対話的なrsync
が可能になります。- セキュリティには十分配慮し、スクリプトを取り扱うようにしましょう。
- より安全な運用を目指すなら、SSH 鍵認証への切り替えもおすすめです。
コメント