처리를 위해 일부 파일을 원격 호스트에 자동으로 (스크립트를 통해) rsync해야 합니다. 그러나 사용자, 그룹 및 파일 권한이 처리되려면 호스트 전체에서 지속되어야 합니다.
이 작업은 자동화되어 있으므로 비밀번호를 입력할 수 없습니다. rsync를 실행하는 사용자의 SSH 키가 이미 존재해야 합니다. 파일의 소유자는 루트이므로 스크립트를 소유자로 실행할 수 없습니다(따라서 루트 SSH 키를 저장할 수 없습니다). 따라서 슈퍼유저로 실행할 수도 없습니다.
또한 파일의 권한은 440(루트: groupImNotIn)입니다.
무엇보다도 두 시스템이 모두 프로덕션 단계에 있으므로 두 호스트 중 하나를 수정하는 것(xattrs를 열 수 없고 setgid를 사용할 수 없으며 umask를 변경할 수 없음 등)은 문제가 되지 않습니다.
이를 수행할 수 있는 방법이 있습니까?
답변1
이를 달성하는 방법을 찾았습니다. /etc/sudoers
수신 측에서 <user> ALL=NOPASSWD:/usr/bin/rsync
비밀번호 없는 기능을 활성화 하려면 수신 사용자를 추가하세요. sudo rsync
따라서 전송된 파일의 모든 권한/소유자/그룹이 보존됩니다. 사용되는 rsync 명령은 다음과 같습니다.
rsync -aviL <file> <user>@<destination>:<directory> --rsync-path="sudo rsync"
이전 사용자를 위해 SSH 키를 저장하면 비밀번호를 입력하거나 루트 SSH 연결을 설정할 필요 없이 모든 파일 전송이 자동으로 완료될 수 있습니다.
그러나 이 접근 방식은 원격 수퍼유저 rsync에 보안 문제를 발생시킵니다.