はじめに
Windows PCのフォルダーを定期的にLinuxサーバーへバックアップしたいとき、セキュリティと効率性の両立が課題になります。
単純なファイルコピーでは時間がかかりますし、公開鍵認証を使わないSSH接続はセキュリティ上リスクが残ります。
そこで今回は、SSHトンネルを利用して安全な通信経路を確保し、rsyncで効率的に差分同期する方法を解説します。
rsyncとは?
rsync
はファイルの差分だけを転送する高効率な同期ツールです。
特徴:
- 差分転送で効率的(更新分のみ送信)
- SSHと組み合わせて暗号化通信が可能
- バックアップ用途に最適
Linuxには標準搭載されていることが多く、Windowsからも利用できます。
Windowsで必要な準備
WindowsからLinuxへrsyncするためには、以下の環境を整えます。
1. Git for Windows または cwRsync の導入
- Git for Windows をインストールすると
rsync
とssh
が利用可能になります。
例:C:\Program Files\Git\usr\bin\rsync.exe
2. SSH公開鍵認証を設定
Linuxサーバーに安全に接続するため、パスワードではなく公開鍵認証を使います。
- Windowsで鍵ペアを作成
ssh-keygen -t ed25519 -C "backup@windows"
→C:\Users\ユーザー名\.ssh\id_ed25519.pub
が生成される - 公開鍵をLinuxへ登録
Linux側の~/.ssh/authorized_keys
に公開鍵を追記します。 - パーミッションを調整
chmod 600 ~/.ssh/authorized_keys chmod 700 ~/.ssh
SSHトンネルを使った接続
SSHトンネルを経由することで、通信を安全にカプセル化できます。
例えば、WindowsからLinuxサーバーに直接接続できない場合に有効です。
例:Windows → (踏み台サーバー) → Linuxターゲットサーバー
ssh -L 2222:target-linux:22 user@bastion-server
上記でローカルポート 2222
にLinuxサーバーのSSHを転送できます。
その後、rsyncは以下のように実行します
rsync -avz -e "ssh -p 2222" /c/Users/USER/Documents/ backupuser@localhost:/home/backupuser/windows_backup/
WindowsからLinuxへの同期コマンド例
基本的なrsyncコマンド
rsync -avz -e "ssh" /c/Users/USER/Documents/ backupuser@linux-server:/home/backupuser/windows_backup/
-a
: アーカイブモード(パーミッション・シンボリックリンク保持)-v
: 詳細表示-z
: 圧縮転送
除外指定を入れる例
rsync -avz --exclude="*.tmp" --exclude="node_modules/" /c/Users/USER/Projects/ backupuser@linux-server:/srv/backup/projects/
定期的な自動実行(Windowsタスクスケジューラ)
バックアップを自動化するには、Windowsのタスクスケジューラを使います。
- 「タスクスケジューラ」を開く
- 新しいタスクを作成
- トリガー:毎日/毎時など設定
- 操作:プログラムに以下を指定
"C:\Program Files\Git\usr\bin\bash.exe"
引数:-c "rsync -avz -e 'ssh' /c/Users/USER/Documents/ backupuser@linux-server:/home/backupuser/windows_backup/"
これで定期バックアップが自動実行されます。
セキュリティ強化のポイント
- SSHポートをデフォルトの22から変更
- Fail2Banで不正アクセス対策
- Linuxサーバー側のrsync専用ユーザーを作成し、必要最小限の権限に制御
まとめ
- rsyncで効率的に差分バックアップ可能
- SSH公開鍵認証+トンネルでセキュリティを強化
- Windowsタスクスケジューラで自動化すれば手間いらず
業務用PCや自宅のWindowsからLinuxサーバーに安全にバックアップを取りたい場合、この方法は非常に実用的です。