如何使用 scp 复制需要 root 访问权限的文件?

如何使用 scp 复制需要 root 访问权限的文件?

我有一台 Ubuntu 服务器,我正在使用 SSH 连接它。

我需要将文件从我的机器上传到/var/www/服务器上,其中的文件/var/www/归 拥有root

使用 PuTTY,登录后,我必须sudo su先输入我的密码才能修改中的文件/var/www/

但是当我使用 WinSCP 复制文件时,我无法在中创建/修改文件/var/www/,因为我正在连接的用户对中的文件没有权限,并且在 ssh 会话的情况下/var/www/我无法像我那样说。sudo su

你知道我该如何处理这个问题吗?

如果我在本地机器上工作,我会打电话gksudo nautilus,但在这种情况下,我只能通过终端访问该机器。

答案1

sudo您说得对,使用 时没有scp。一种解决方法是使用scp将文件上传到您的用户有权创建文件的目录,然后通过 ssh 登录并使用sudo将文件移动/复制到最终目的地。

scp -r folder/ [email protected]:/some/folder/you/dont/need/sudo
ssh [email protected]
 $ sudo mv /some/folder /some/folder/requiring/perms 
# YOU MAY NEED TO CHANGE THE OWNER like:
# sudo chown -R user:user folder

另一个解决方案是更改您上传文件到的目录的权限/所有权,以便您的非特权用户能够写入这些目录。

一般来说,在root帐户中工作应该是一个例外,而不是规则 - 你提出问题的方式让我认为你可能有点滥用它,这反过来会导致权限问题 - 在正常情况下你不需要超级管理员权限来访问你自己的文件。

从技术上讲,您可以将 Ubuntu 配置为允许直接以远程登录root,但此功能由于某种原因被禁用,因此我强烈建议您不要这样做。

答案2

快捷方式

从服务器到本地机器:

ssh user@server "sudo cat /etc/dir/file" > /home/user/file

从本地机器到服务器:

cat /home/user/file | ssh user@server "sudo tee -a /etc/dir/file"

答案3

另一种方法是使用 tar + ssh 而不是 scp 进行复制:

tar -c -C ./my/local/dir \
  | ssh [email protected] "sudo tar -x --no-same-owner -C /var/www"

答案4

也许最好的方法是使用rsync赛格威/同步在 Windows 中)通过 SSH 进行登录?

例如,要上传具有所有者的文件www-data

rsync -a --rsync-path="sudo -u www-data rsync" path_to_local_data/ [email protected]:/var/www

对于您来说,如果您需要 root 权限,命令将如下所示:

rsync -a --rsync-path="sudo rsync" path_to_local_data/ [email protected]:/var/www

看:使用 sudo scp 到远程服务器

相关内容