개요

개요

나는 일반적으로 그래픽 SSH 클라이언트를 사용하여 로컬 및 원격 디렉터리를 동기화합니다. 그리고 root에서 까지의 모든 파일의 소유권을 설정해야 합니다 www-data.

나중에 소유권을 설정할 필요가 없도록 Rsync www-data대신 에 동일한 작업을 수행할 수 있습니까 ?root

답변1

무엇을 하려는지 명확하지 않으므로 로컬 파일을 사용자 A가 소유하고 원격 파일을 사용자 B가 소유하길 원한다고 가정하겠습니다. 사용자 A로 다음 명령을 실행하는 경우:

rsync [options] [email protected]:/path/to/remote/dir /path/to/local/dir

이것은 당신이 원하는 효과를 가져올 것입니다. 그러나 이는 실제로 rsync 문제가 아닙니다. 따라서 위 명령이 수행할 작업에 대해 자세히 설명하지 않고 귀하의 질문에 초점을 맞추고 있습니다. 그래픽 SSH 클라이언트를 사용하더라도 사용자 A로 실행하고 원격 시스템에 사용자 B로 로그온하도록 설정하면 동일한 작업을 수행할 수 있습니다.

답변2

루트로 실행 중인 경우 rsync에 빌드된 chown 옵션을 사용하십시오.

sudo rsync --chown=www-data:group user@remoteIP:/var/www/html/ /var/www/html

('그룹'을 원하는 그룹으로 바꾸거나 --chown=www-data를 사용하고, 사용자, 원격IP도 바꾸고 폴더를 원하는 대로 변경하세요)

루트로 명령을 실행하지 않으면 sudo가 필요하므로 파일 소유권이 변경되지 않습니다. 따라서 실제로 www-data로 명령을 실행해야 하지만 이로 인해 다른 문제가 발생합니다.

답변3

sudo -u www-data를 사용할 수 있으면 해당 사용자와 rsync를 실행할 수 있습니다. 대상이 다른 서버에 있는 경우 --rsync-path도 동일하게 설정해야 합니다(sudo -u www-data rsync). 또한 tty 문제를 해결해야 합니다(ssh에서 -t를 사용하여). 하지만 배포 및 SSH 서버 설정에 따라 매우 까다로울 수 있습니다. 개인적으로 나는 서버가 원격 루트 로그인을 허용하지 않는 한 루트를 사용하고 나중에 chown을 수행하는 것이 더 쉽다고 생각합니다.

답변4

개요

(srcmachine)  (rsync)   (destmachine)
  srcuser    -- SSH -->   destuser
                             |
                             | sudo su jenkins
                             |
                             v
                          jenkins

rsync를 원한다고 가정해 보겠습니다.

  • 에서:
    • 기계:srcmachine
    • 사용자:srcuser
    • 예배 규칙서:/var/lib/jenkins
  • 에게:
    • 기계:destmachine
    • 사용자: destuserSSH 연결 설정.
    • 예배 규칙서:/tmp
    • 최종 파일 소유자: jenkins.

해결책

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

자세한 내용은 여기를 참조하세요:

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

관련 정보