Sudo為什麼通過
為什麼通過sudo rsync
傳輸文件到另一台電腦需要目標電腦的root密碼?
我正在嘗試將目錄傳輸到另一台電腦
$ 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
,scp
或rsync
不指定遠端使用者名時,工具將假定遠端使用者名與本地使用者名相同。所以你的第一個例子中的命令: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 操作。修復:使用
rsync
with 時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