パスワード認証の rsync を自動化する sshpass の使い方【Mac対応】

リモートサーバーとローカル環境を同期する際、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 鍵認証への切り替えもおすすめです。

コメント

タイトルとURLをコピーしました