주기적으로 폴더를 백업으로 전송하려면 rsync를 사용해야 합니다(기본적으로 이를 자동화하고 싶습니다). 처음에는 매번 비밀번호를 입력해야 했지만 공개/개인 키 인증 메커니즘을 사용하여 이를 달성했습니다.
그러나 권한으로 보호된 파일을 제외하고는 sudo를 사용하지 않고 비밀번호를 묻지 않고 쉽게 파일을 보낼 수 있습니다. 그들에게는 이렇게 말합니다.rsync: send_files failed to open "/home/usr/...../checkpoints/246/descriptors.json": Permission denied (13) .
따라서 sudo
비밀번호를 사용하고 입력해야 합니다. 이 문제를 어떻게 해결할 수 있나요? 50밀리초 간격 등 정기적인 전송을 위해 공용 디렉터리에 폴더를 추가합니다. 그래서 이것을 자동화해야 합니다.
답변1
root
생성한 SSH 키를 사용하도록 구성하거나 루트가 아닌 사용자로 파일을 읽을 수 있도록 파일에 대한 권한을 변경하는 두 가지 옵션이 있습니다 .
옵션 1: SSH 키를 루트로 사용
귀하는 루트이기 때문에 귀하의 사용자를 위해 생성한 SSH 개인 키만 읽고 사용할 수 있습니다. ssh
플래그를 사용하여 개인 키를 지정할 수 있으며 -i
, rsync를 사용하면 플래그를 사용하여 원격 쉘 명령을 변경할 수 있습니다 -e
. 그러면 다음과 같은 명령이 생성됩니다.
sudo rsync -e "ssh -i /home/usr/.ssh/id_rsa" <the rest of your rsync args>
/home/usr/.ssh/id_rsa
생성한 SSH 키의 실제 경로로 바꿉니다 . 귀하의 SSH 키가 비밀번호로 보호되어 있지 않다고 가정합니다. 그렇다면 삭제 비밀번호를 사용해야 합니다 ssh-keygen -p <keyfile>
.
옵션 2: 소스 파일의 권한 변경
가장 깔끔한 해결책은 파일에 기록된 내용을 수정하여 처음부터 루트가 아닌 사용자가 소유하도록 하는 것입니다. 하지만 chown
파일을 복사하기 전에 복사 할 수도 있습니다 . 예를 들어,
sudo chown -R "$USER" "/home/usr/...../checkpoints"
하지만 경쟁 조건이 있다는 점에 유의하세요. rsync가 완료되기 전에 다른 사용자로 생성된 새 파일에는 오류가 발생할 수 있으며 다음 실행까지 복사되지 않습니다.