我想用来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
然后,您可以使用任何本地命令,例如cp
、chmod
、rsync
等,而不必担心文件是本地的还是远程的。使用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 将被覆盖。