![개요](https://rvso.com/image/1316740/%EA%B0%9C%EC%9A%94.png)
나는 일반적으로 그래픽 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
- 사용자:
destuser
에SSH 연결 설정. - 예배 규칙서:
/tmp
- 최종 파일 소유자:
jenkins
.
- 기계:
해결책
rsync --rsync-path 'sudo -u jenkins rsync' -avP --delete /var/lib/jenkins destuser@destmachine:/tmp
자세한 내용은 여기를 참조하세요: