我正在尝试将目录传输到另一台计算机
$ 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 密码?我提供了目标 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:
谢谢。
答案1
从您的上一个示例来看,您的非 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
不,用户名不有a 的两端相同rsync
(或scp
- 省略远程用户名只是用户名常见情况的简写是相同。
答案2
这取决于您运行 rsync 命令的帐户。如果您以 root 身份运行,那么它期望您在目标系统上拥有 root 权限