概述

概述

我通常使用圖形 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

在這裡閱讀更多內容:

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

相關內容