我通常使用圖形 SSH 客戶端來同步本地和遠端目錄。我必須設定從root
到 的所有文件的所有權www-data
。
我可以對 Rsync 做同樣的事情,只是我用 aswww-data
而不是root
,這樣我就不必在之後設定所有權?
答案1
目前尚不清楚您想要做什麼,所以讓我假設您希望本機檔案由使用者 A 擁有,遠端檔案由使用者 B 擁有。
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)。您還需要解決 tty 問題(透過在 ssh 中使用 -t ),儘管根據您的發行版和 ssh 伺服器設置,這可能非常棘手。我個人認為使用 root 並隨後執行 chown 會更容易,除非伺服器不允許遠端 root 登入。
答案4
概述
(srcmachine) (rsync) (destmachine)
srcuser -- SSH --> destuser
|
| sudo su jenkins
|
v
jenkins
假設您想要 rsync:
- 從:
- 機器:
srcmachine
- 用戶:
srcuser
- 目錄:
/var/lib/jenkins
- 機器:
- 到:
- 機器:
destmachine
- 使用者:
destuser
至建立 SSH 連接。 - 目錄:
/tmp
- 最終文件所有者:
jenkins
.
- 機器:
解決方案
rsync --rsync-path 'sudo -u jenkins rsync' -avP --delete /var/lib/jenkins destuser@destmachine:/tmp
在這裡閱讀更多內容: