我有一台 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