概要

概要

root私は通常、ローカル ディレクトリとリモート ディレクトリを同期するためにグラフィカル SSH クライアントを使用します。 そして、から までのすべてのファイルの所有権を設定する必要がありますwww-data

www-dataRsync でも同じことができますか? ただし、の代わりにとして実行すれば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
    • ユーザー: destusertoSSH接続を確立する
    • ディレクトリ:/tmp
    • 最終ファイルの所有者: jenkins.

解決

rsync --rsync-path 'sudo -u jenkins rsync' -avP --delete /var/lib/jenkins destuser@destmachine:/tmp

詳細はこちらをご覧ください:

https://unix.stackexchange.com/a/546296/116861

関連情報