我可以将 sudo 的功能扩展到 bash shell 上的目标目录/文件吗?

我可以将 sudo 的功能扩展到 bash shell 上的目标目录/文件吗?

我在本地网络中有 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在膨胀机中使用,请遵循以下说明:

  1. 找出rsync的路径:which rsync
  2. 编辑 /etc/sudoers 文件:sudo visudo
  3. 添加行<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

相关内容