我在本地网络中有 2 台 Ubuntu 服务器:12.04.5 LTS 和 16.04.1 LTS,我是这两台服务器的管理员,并且可以是它们的超级用户。假设每台服务器都是A和B,我现在登录服务器A。
当我想将A中的文件复制到B中的某个目录时,需要B的root权限才能放置该文件,我该怎么做?
我的尝试如下,但由于服务器B没有权限,没有成功:
sudo scp /foobar/foo/bar.txt user@serverB:/bar.txt
scp: /bar.txt: Permission denied
sudo权限只影响源目录的权限,不影响目标目录的权限。
当然,如果我适当地更改目标目录的权限,我可以复制文件而不会出现无权限错误。但每次复制文件时都更改权限有点烦人。
而且 Ubuntu 的默认配置不允许 root 登录两台服务器。
如果大家知道什么好方法,请教教我。我使用 bash shell。
答案1
如果您可以以普通用户(而不是 root)身份读取源计算机上的文件,请考虑使用 pull scp 而不是推送 scp:
serverB:~$ sudo scp user@serverA:/foobar/foo/bar.txt /bar.txt
如果您无法读取源计算机上的文件,则需要执行您所描述的两个步骤。无法让 sudo 在多台机器上工作。
答案2
嗯...为什么不在服务器 B 上创建一个目录不如果需要提升权限,请将文件复制到该位置,然后在登录到服务器 B 时将其移动到您想要的任何位置。吻。
答案3
我建议您使用rsync
,以便您可以sudo
在膨胀机中使用,请遵循以下说明:
- 找出rsync的路径:
which rsync
- 编辑 /etc/sudoers 文件:
sudo visudo
- 添加行
<username> ALL=NOPASSWD:<path to rsync>
,其中是将用于登录的username
用户的登录名。rsync
该用户必须能够使用 sudo
然后,在源计算机上指定sudo rsync
应使用:
rsync ... --rsync-path="sudo rsync" ...
在目标计算机上不使用它NOPASSWD
会导致出现以下消息
sudo: no tty present and no askpass program specified