scp 强制覆盖只读文件

scp 强制覆盖只读文件

我想用来scp移动一些文件并覆盖目标服务器上这些文件的任何现有实例。其中一些可能是只读的,当然,这会导致scp“权限被拒绝”而失败。我似乎找不到;--force的类型开关scp这可能吗?

我知道,rsync但这当前在目标服务器上不可用。

答案1

如果您没有写权限,则无法修改/覆盖任何文件,并且没有可能的scp选项可以更改它。

为了解决这个问题,您应该首先连接到服务器(ssh例如使用)并修改文件的权限。如果您不知道该怎么做,这里有一个简单的命令可以解决这个问题:

chmod +w /path/to/your/file

一些注意事项:

  • 这些文件是只读的可能是有原因的。在做任何事情之前,请确保您知道原因,并且更改此设置不会破坏任何内容或引入安全漏洞。

  • 如有必要,您可以在执行命令后删除写入权限scp(使用chmod -w /path/to/file:)。

  • 如果有太多具有只读权限的文件,则需要将它们找出来。find(至少大多数 Linux 发行版中可用的 GNU 版本)有一个-perm可以使用的测试(man find了解更多信息)。

  • 有人可能会建议您以 root 身份连接或使用sudo.它会起作用,但看在上帝的份上,不行。我无法告诉你这有多么错误。

答案2

如果服务器上可以使用 SFTP(通常是),您可以使用SSHFS。这使您可以在客户端上安装远程文件。您需要在服务器上安装一个 SFTP 守护进程保险丝在客户端上。

mkdir /net/myserver
sshfs myserver:/ /net/server

然后,您可以使用任何本地命令,例如cpchmodrsync等,而不必担心文件是本地的还是远程的。使用rsync,传递--no-whole-file选项以告诉它使用其节省带宽的增量传输算法(当 rsync 认为两条路径都是本地时,该算法将被关闭)。

rsync -a --no-whole-file somedir /net/myserver/somewhere

答案3

Rsync 不必位于目标服务器上;您可以使用

# rsync -avz -e ssh /path/to/files/ [email protected]:/tmp/ 

有关于此的信息在这里:

http://troy.jdmz.net/rsync/index.html

正如前面所说,不要轻视只读文件;我假设你确切地知道你在做什么。另一种方法是将文件 scp 或 rsync 到目标服务器上的 /tmp/blah 目录中,然后在写入后移动它们。

答案4

如果 scp 在给定文件上给您“权限被拒绝错误”(但 ssh -v 显示身份验证成功),那么问题是您正在尝试使用其他权限集覆盖现有文件,或者该文件可能有另一个所有者(其他权限集)。

尝试删除原始文件。然后后续的 scps 将被覆盖。

相关内容