Rsyncを使用して、Webフォルダー構造をローカルサーバーからリモートサーバーに複製しています。どちらのサーバーもubuntulinuxです。次のコマンドを使用すると、うまく機能します。
rsync -az /var/www/ [email protected]:/var/www/
ローカルシステムとリモートシステムのユーザー名は異なります。私が読んだことから、すべてのファイルとフォルダの所有者とグループを保存することは不可能かもしれません。それは問題ありませんが、両方のサーバーに存在するwww-dataユーザー専用の所有者とグループを保持したいと思います。
これは可能ですか?もしそうなら、私はそれをどのように行うのですか?
**編集**
Rsyncがリモートファイル同期の所有権とグループを保持できることについては、ここにいくつか言及されています: http://lists.samba.org/archive/rsync/2005-August/013203.html
**編集2 **
ここで役立つコメントと回答の多くのおかげで、私は最終的に望ましい効果を得ることができました。ソースマシンのIPが10.1.1.2であり、宛先マシンのIPが10.1.1.1であると仮定します。宛先マシンからこの行を使用できます。
Sudo rsync -az [email protected]:/var/www/ /var/www/
これにより、www-dataなどの共通のユーザー名を持つファイルの所有権とグループが保持されます。 rsync
なしでSudo
を使用しても、これらの権限は保持されないことに注意してください。
--rsync-path
オプションを使用して、ターゲットホストでrsyncをSudoすることもできます。
# rsync -av --rsync-path="Sudo rsync" /path/to/files user@targethost:/path
これにより、targethostでuser
として認証できますが、それでもSudo
を介して特権書き込み権限を取得できます。 Sudoによるパスワードの要求を回避するには、ターゲットホスト上のsudoersファイルを変更する必要があります。手順とサンプルについては、man sudoers
またはSudo visudo
を実行してください。
Www-dataが所有するファイルの所有権を保持したいが、他のファイルは保持したくないとのことです。これが本当に当てはまる場合は、chown
を実装するかrsync
を2回実行して権限を更新しない限り、運が悪い可能性があります。 1人のユーザーのみの所有権を保持するようにrsyncに指示する方法はありません。
そうは言っても、rsyncの--files-from
オプションについて読む必要があります。
rsync -av /path/to/files user@targethost:/path
find /path/to/files -user www-data -print | \
rsync -av --files-from=- --rsync-path="Sudo rsync" /path/to/files user@targethost:/path
私はこれをテストしていないので、findの出力を--files-from=-
にパイピングする方法が正確にわかりません。間違いなく実験する必要があります。
同様の問題が発生し、rsyncコマンドをだましました。
rsync -avz --delete [email protected]:/ home // domains/site/public_html// home/domains2/public_html && chown -R wwwusr:wwwgrp/home/domains2/public_html /
&&は、rsyncが正常に完了すると、フォルダーに対してchownを実行します(1x '&'は、rsyncの完了ステータスに関係なくchownを実行します)
ローカルシステムとリモートシステムのルートユーザーは異なります。
これは何を意味するのでしょうか? rootユーザーはuid 0です。どのように違いますか?
コピーするディレクトリへの読み取り権限を持つユーザーは、どのユーザー名がどのファイルを所有しているかを判断できます。ルートのみがファイルの所有権を変更できます書き込まれます。
現在、ソースマシンでコマンドを実行しています。これにより、書き込みは[email protected]に関連付けられたアクセス許可に制限されます。代わりに、targetマシンでコマンドas rootを実行してみることができます。 読み取りソースマシンへのアクセスは問題ではありません。
したがって、ターゲットマシン(10.1.1.1)では、ソースが10.1.1.2であると想定しています。
# rsync -az [email protected]:/var/www/ /var/www/
グループが両方のマシンで一致していることを確認してください。
また、DSAまたはRSAキーを使用して[email protected]へのアクセスを設定し、パスワードが変動しないようにします。たとえば、ターゲットマシンのrootとして、次のコマンドを実行します。
# ssh-keygen -d
次に、ファイル/root/.ssh/id_dsa.pub
の内容を取得し、ソースマシンの~user/.ssh/authorized_keys
に追加します。ターゲットマシンからrootとしてssh [email protected]
して、それが機能するかどうかを確認できます。パスワードプロンプトが表示された場合は、エラーログをチェックして、キーが機能しない理由を確認してください。
私の知る限り、あなたがルートでない場合、あなた以外の誰かにファイルをchown
することはできません。したがって、すべてのファイルは指定されたユーザーを所有者として作成されるため、www-data
アカウントを使用してrsync
する必要があります。したがって、後でファイルをchown
する必要があります。
そうですね、rsyncの課題を完全にスキップして、tarトンネルを介してこれを行うことができます。
Sudo tar zcf - /path/to/files | \
ssh user@remotehost "cd /some/path; Sudo tar zxf -"
Grahamが説明したように、SSHキーを設定する必要があります。
これは、rsyncのような増分更新ではなく、完全なディレクトリコピーを処理することに注意してください。
ここでの考え方は次のとおりです。
私は主にローカルでウィンドウを使用しているので、これはファイルをサーバーと同期するために使用するコマンドラインです(debian):
user@user-PC /cygdrive/c/wamp64/www/projects
$ rsync -rptgoDvhP --chown=www-data:www-data --exclude=.env --exclude=vendor --exclude=node_modules --exclude=.git --exclude=tests --exclude=.phpintel --exclude=storage ./website/ username@hostname:/var/www/html/website