"sudo rsync"를 통해 파일을 다른 컴퓨터로 전송하려면 대상 컴퓨터의 루트 비밀번호가 필요한 이유는 무엇입니까? [복사]

"sudo rsync"를 통해 파일을 다른 컴퓨터로 전송하려면 대상 컴퓨터의 루트 비밀번호가 필요한 이유는 무엇입니까? [복사]

디렉터리를 다른 컴퓨터로 전송하려고 합니다.

$ rsync -a --delete --stats -h wget 'olive:/tmp'

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 5 (reg: 4, dir: 1)
Number of deleted files: 0
Number of regular files transferred: 4
Total file size: 12.94K bytes
Total transferred file size: 12.94K bytes
Literal data: 12.94K bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 13.31K
Total bytes received: 103

sent 13.31K bytes  received 103 bytes  5.36K bytes/sec
total size is 12.94K  speedup is 0.96

소스 디렉토리에 로컬 루트 권한이 필요한 일부 파일이 포함되어 있으면 추가하겠습니다 sudo. 이것이 맞습니까?

그런데 왜 다른 컴퓨터의 루트 비밀번호를 계속 묻는 걸까요? 대상 루트의 비밀번호를 제공했지만 계속해서 비밀번호를 묻습니다.

$ sudo rsync -a --delete --stats -h wget 'olive:/tmp'
root@olive's password: 
Permission denied, please try again.
root@olive's password: 

로컬 루트 권한이 필요한 소스 파일을 복사하려면 어떻게 해야 합니까?

제안된 중복 항목을 시도했지만 성공하지 못했습니다.

$ sudo rsync -e 'ssh -i /home/t/.ssh/id_rsa' -a --delete --stats -h wget 'olive:/tmp'
root@olive's password: 
Permission denied, please try again.
root@olive's password: 

감사해요.

답변1

마지막 예에서 루트가 아닌 사용자 이름은 입니다 t.

을 사용 ssh하거나 원격 사용자 이름을 지정하지 않으면 도구는 원격 사용자 이름이 로컬 사용자 이름과 동일한 것으로 가정합니다. 따라서 첫 번째 예의 명령은 다음과 같습니다.scprsync

rsync -a --delete --stats -h wget 'olive:/tmp'

다음과 같이 더 명시적으로 작성할 수 있습니다.

rsync -a --delete --stats -h wget 't@olive:/tmp'

명령 앞에 접두사를 붙이면 사용자 이름이 변경되고 명령줄의 나머지 부분은 (사용 하지 않는 한 ) sudo로 실행됩니다 .rootsudo -u <username>

두 번째 예는 다음과 같습니다.

sudo rsync -a --delete --stats -h wget 'olive:/tmp'

이제 다음과 동일합니다.

sudo rsync -a --delete --stats -h wget 'root@olive:/tmp'

명령이 rsync루트로 실행되고 원격 사용자 이름이 정의되지 않았기 때문에 원격 측에서 루트 계정을 사용하여 rsync 작업을 수행한다고 가정합니다.


해결 방법: rsyncwith를 사용할 때 sudo사용하려는 원격 사용자 이름을 명확히 하세요.

sudo rsync -a --delete --stats -h wget 't@olive:/tmp'

또는 이것이 작동하지 않는 경우(즉, sudo구성에서 해당 옵션을 활성화하여 명령을 실행할 사용자와 일치하도록 실행되는 명령의 환경 변수를 always_set_home변경함 ) 세 번째 예의 다음 형식을 시도해 보십시오.$HOME

sudo rsync -e 'ssh -i /home/t/.ssh/id_rsa' -a --delete --stats -h wget 't@olive:/tmp'

이 형식에서는 rsync명령이 로컬로 실행되지만 사용자로 로그인됩니다 root. 이는 첫 번째 예를 기반으로 SSH 키를 설정하는 것으로 보입니다.olivet

아니요, 사용자 이름이 아닙니다.가지다a의 양쪽 끝이 동일합니다 rsync(또는 scp원격 사용자 이름을 생략하는 것은 사용자 이름의 일반적인 경우를 줄여서 표현한 것입니다).같은.

답변2

이는 rsync 명령을 실행하는 계정에 따라 다릅니다. 루트로 실행하면 대상 시스템에 대한 루트 권한이 있을 것으로 예상됩니다.

관련 정보