Sudo

為什麼通過sudo rsync傳輸文件到另一台電腦需要目標電腦的root密碼?

  • December 13, 2019

我正在嘗試將目錄傳輸到另一台電腦

$ 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

如果源目錄包含一些需要本地 root 權限的文件,我添加sudo. 這是正確的嗎?

但是為什麼它一直要求我輸入另一台電腦的 root 密碼?我提供了目的地根的密碼,但它一直在要求它。

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

如果我想複製需要本地root權限的源文件怎麼辦?

我嘗試了建議的副本,但沒有用

$ 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: 

謝謝。

從您的上一個範例中,您的非 root 使用者名似乎是t.

當您使用ssh,scprsync不指定遠端使用者名時,工具將假定遠端使用者名與本地使用者名相同。所以你的第一個例子中的命令:

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

可以更明確地寫成:

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

當您為命令添加前綴時sudo,它會更改使用者名,命令行的其餘部分將作為(到root,除非sudo -u <username>使用)執行。

所以,你的第二個例子:

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

現在相當於:

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

因為該rsync命令以 root 身份執行,並且由於未定義遠端使用者名,所以它假設您也想在遠端端使用 root 帳戶執行 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 密鑰。olive``t

不, (或!)操作的兩端的使用者名不必相同*-省略遠端使用者名只是使用者名相*同時常見情況的簡寫。rsync``scp

引用自:https://unix.stackexchange.com/questions/557120