root
私は通常、ローカル ディレクトリとリモート ディレクトリを同期するためにグラフィカル SSH クライアントを使用します。 そして、から までのすべてのファイルの所有権を設定する必要がありますwww-data
。
www-data
Rsync でも同じことができますか? ただし、の代わりにとして実行すればroot
、後で所有権を設定する必要がなくなりますか?
答え1
何をしたいのか明確ではないので、ローカル ファイルの所有者をユーザー A にし、リモート ファイルの所有者をユーザー B にしたいと仮定します。ユーザー A として次のコマンドを実行します。
rsync [options] [email protected]:/path/to/remote/dir /path/to/local/dir
これで、必要な効果が得られます。ただし、これは実際には rsync の問題ではありません (したがって、上記のコマンドが何を行うかについては詳しく説明せず、質問に焦点を当てています)。グラフィカル SSH クライアントでも、ユーザー A として実行し、ユーザー B としてリモート システムにログオンするように設定すれば、同じことができるはずです。
答え2
root として実行している場合は、rsync に組み込まれている chown オプションを使用します。
sudo rsync --chown=www-data:group user@remoteIP:/var/www/html/ /var/www/html
(「group」を希望のグループに置き換えるか、--chown=www-data を使用します。また、user、remoteIP を置き換え、フォルダーを好みに合わせて変更します)
コマンドを root として実行しないと、ファイルの所有権は変更されません。そのためには sudo が必要です。したがって、実際には www-data としてコマンドを実行する必要がありますが、これにより別の問題が生じます。
答え3
sudo -u www-data が実行できる場合は、そのユーザーで rsync を実行できます。宛先が別のサーバー上にある場合は、--rsync-path も同じように設定する必要があります (sudo -u www-data rsync)。また、ディストリビューションと ssh サーバーの設定によっては非常に難しい場合がありますが、tty の問題を回避する必要もあります (ssh で -t を使用する)。個人的には、サーバーがリモート root ログインを許可していない限り、root を使用して後で chown を実行する方が簡単だと思います。
答え4
概要
(srcmachine) (rsync) (destmachine)
srcuser -- SSH --> destuser
|
| sudo su jenkins
|
v
jenkins
rsync を実行したいとします。
- から:
- 機械:
srcmachine
- ユーザー:
srcuser
- ディレクトリ:
/var/lib/jenkins
- 機械:
- に:
- 機械:
destmachine
- ユーザー:
destuser
toSSH接続を確立する。 - ディレクトリ:
/tmp
- 最終ファイルの所有者:
jenkins
.
- 機械:
解決
rsync --rsync-path 'sudo -u jenkins rsync' -avP --delete /var/lib/jenkins destuser@destmachine:/tmp
詳細はこちらをご覧ください: