我尝试将一些文件从本地机器复制到远程主机。
root@local:~$ scp /var/www/html/file.php root@remote_host:/var/www/html/test/
结果是
scp:/var/www/html/test:权限被拒绝
root@remote_host 的密码:权限被拒绝,请重试。
这些是远程计算机上文件夹的权限
德鲁伊
您知道可能是什么问题吗?
答案1
如果您以 root 身份登录,则 root 拥有所有允许的权限,无论任何目录上的权限如何(仅当目录具有 chflags(1) 上的系统不可变标志时才可以排除)
您提供的密码错误,或者远程主机仅使用了公钥认证。
答案2
当然,原因可能多种多样。
最明显的答案是,出于某种原因,您无法通过远程系统进行身份验证。但是,由于您正在输出远程系统上的目录权限,我假设您有权利和能力通过某种方式访问它(但可能不是通过 ssh)。
因此,首先要做的是通过 ssh 连接到机器并确保您确实可以写入该位置(您可能已经尝试过):
ssh root@remote_host
cd /var/www/html/test/
touch scratch
如果您能看到空白文件,则表明您可以写入。
假设您可以正常访问系统,但上述方法不起作用,也可能是目录上实际上没有写入权限。一个例子是,如果远程计算机上的目录位于某种类型的已安装文件系统中,例如 NTFS(它不会为您提供可靠的 UNIX 类型模式),并且内核将其设置为只读,因为它不是通过 fuse 安装以提供写入权限的。您需要更仔细地检查本地设置,但除非它是新的(或以这种方式设计的),否则这将是一个非常不寻常的设置。
从这里调试系统对我来说很难,所以我只给你一个替代方法试试。如果你可以通过 ssh 访问系统并从系统内部写入文件,那么一种方法就是反过来做,如果你的本地计算机不在防火墙后面等。
您甚至无需转到另一个终端即可轻松找到您 ssh 连接的计算机的 IP。为了简单起见,我们将其设为环境变量:
export IP="`echo $SSH_CLIENT | awk '{print $1}'`"
我通常将此行包含在例如 ~/.bashrc 中,因为我觉得它很方便。
无论如何,那么
scp user@$IP:/var/www/html/file.php /var/www/html/test/
当然,如果您想运行一个程序在本地机器上自动执行这些更新,这还不能解决您的问题!有办法通过 SSH 调用命令来解决这个问题(因此您将通过 ssh 调用 scp,这似乎违反直觉);但是,要使其完全自动化,您需要设置 ssh 密钥,并且不为密钥设置密码。这不是我推荐的用于 root 访问机器的方法,并且需要对阻止 scp 的远程机器的 ssh 进行某种调试。