如何使用 putty 将文件从本地计算机传输到具有所需权限的远程服务器

如何使用 putty 将文件从本地计算机传输到具有所需权限的远程服务器

我正在尝试使用 putty 将一个大文件传输到远程服务器。在传输文件期间(因为文件很大,需要一些时间来传输),权限设置为某些默认只读(rw-r---- )。

我需要在文件传输过程中(这意味着文件正在传输时)设置文件的权限。我怎样才能在腻子中做到这一点?请任何人提出建议。

我是 Linux 命令新手,您能否提供一些我可以遵循的语法。

答案1

我认为这个答案这就是您正在寻找的。

将其粘贴在这里,以便我可以添加一些解释:

您可以使用rsync以下方式进行转账:

rsync --chmod=u+rwx,g+rwx,o+rx file.txt user@host:abc/

这会将文件移动到的 home内的file.txt目录,同时还设置指定的权限。如果您需要设置绝对路径而不是位于 的主目录内的路径,只需写出所述完整路径,包括前导斜杠(例如:)。abcuserhostuseruser@host:/abs/path/

如果您更喜欢使用scp,您可以在转移后设置权限:

scp file.txt user@host:abc/
ssh user@host 'chmod 755 abc/file.txt'

这与上一步相同,但分为两个命令;首先上传,然后权限更改。您要求仅使用一个命令来处理它,与上传相同,但我认为有一个额外的选择可能会帮助其他人。

答案2

实际的 PuTTY 应用程序是一个终端仿真器,它本身并不传输文件。但psftp它带有pscp文件传输命令。

不幸的是,既不psftppscp不允许设置文件权限尽管文件正在传输中。选项-ppscp保留文件时间戳,但不保留权限。使用 时psftp,文件传输命令put没有mput指定远程权限的选项,但chmod您可以使用一个单独的命令在传输完成后设置文件权限。chmod有关的命令的信息,请参阅 PuTTY 文档第 6.2.14 章psftp

如果您有在传输文件后立即自动处理文件的功能,请注意,您可能需要首先使用psftp以下任一方式传输文件:

  • 到不同的目录
  • 或一个临时文件名不是匹配自动化正在寻找的东西

传输完成后,使用 设置权限chmod,最后使用该mv命令将文件移动到自动化使用的目录,或将文件重命名为其实际的预期名称。

(在任何兼容 POSIX 的 unix 风格文件系统上,在单个文件系统中移动/重命名文件的任何操作都必须是原子操作,即其他进程将把文件操作视为“尚未完成”或“完全完成”,而绝不会以任何方式“进行中”。此处此属性用于确保自动化不会看到它期望的文件,直到文件完全传输并具有允许访问的权限。)

此过程还有助于保证自动化永远不会捕获仍在传输过程中的文件,或者由于传输过程中网络连接失败而导致不完整的文件。

例如,您可以制作如下脚本:(例如filetransfer.scr

cd /some/directory
mkdir incomplete_xfer
cd incomplete_xfer
put file.txt
chmod a+rw file.txt 
mv file.txt ..
cd ..
rmdir incomplete_xfer

然后运行它:

psftp remoteuser@remotehost -b filetransfer.scr

或者,如果您知道远程端需要*.xml文件并且不会对具有任何其他后缀的文件做出反应,您也可以这样做:(替代filetransfer.scr

cd /some/directory
put file.xml file_tmp_incomplete_xfer
chmod a+rw file_tmp_incomplete_xfer
mv file_tmp_incomplete_xfer file.xml

相关内容