【问题标题】:How to sftp file using curl and change the file permission?如何使用 curl sftp 文件并更改文件权限?
【发布时间】:2022-01-11 10:59:29
【问题描述】:

我在服务器-A 中,试图将文件复制到服务器-B 的特定目录,然后想在复制后更改服务器-B 内的文件权限。

我在 Server-A 中运行以下命令

curl --insecure --user user1:psswd1 -T ./tmp/xml-file/D-2022-TEST1.xml sftp://server-B:/mappings/ && chmod 775 ./mappings/D-2022-TEST1.xml

文件被复制,命令成功完成,没有任何错误,但权限部分不起作用。我没有看到目标服务器中文件权限的变化。

输出:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   425    0     0  100   425      0   1839 --:--:-- --:--:-- --:--:--  1839
100   425    0     0  100   425      0   1839 --:--:-- --:--:-- --:--:--  1839

【问题讨论】:

  • edit您的问题并准确复制和粘贴您尝试过的代码,而不是类似您的代码。请详细说明它究竟是如何“不工作”的。实际发生了什么,结果是什么,你会期待什么。复制并粘贴您可能收到的任何错误消息。
  • 我已经编辑了帖子。希望现在更清楚了。
  • 你有本地文件./mappings/D-2022-TEST1.xml吗?如果不是,我会收到 chmod 命令的错误消息。

标签: linux shell curl


【解决方案1】:

您的命令由两部分组成

curl --insecure --user user1:psswd1 -T ./tmp/xml-file/D-2022-TEST1.xml sftp://server-B:/mappings/

使用curl将文件复制到server-B,并且

chmod 775 ./mappings/D-2022-TEST1.xml

这会更改本地文件 ./mappings/D-2022-TEST1.xml(如果存在)的权限。

如果您想在远程server-B 上执行此命令,您可能需要ssh(可能还需要sshpass,例如

ssh user1@server-B chmod 775 ./mappings/D-2022-TEST1.xml

为避免密码提示使用sshpass


试试curl的选项--create-file-mode <mode>

curl --insecure --user user1:psswd1 --create-file-mode 775 -T ./tmp/xml-file/D-2022-TEST1.xml sftp://server-B:/mappings/

另一种解决方案是curl-Q or --quote option

-Q, --quote

(FTP SFTP) 向远程 FTP 或 SFTP 服务器发送任意命令。报价命令在传输发生之前发送(准确地说,就在 FTP 传输中的初始 PWD 命令之后)。要在成功传输后执行命令,请在它们前面加上破折号“-”。 [...]

[...]

chmod 模式文件

chmod 命令修改指定文件的文件模式位。模式操作数是一个八进制整数模式号。

试试

curl --insecure --user user1:psswd1 -Q "-chmod 775 /mappings/D-2022-TEST1.xml" -T ./tmp/xml-file/D-2022-TEST1.xml sftp://server-B:/mappings/

【讨论】:

  • 我不能将 chmod 与 ssh 一起使用以避免密码提示,并且我不允许设置基于密钥的身份验证,因此尝试使用 curl 方法。上述替代 curl 解决方案引发以下错误警告:文件名参数“-Q”看起来像一个标志。 curl:无法打开'-Q'! curl:尝试“curl --help”以获取更多信息 curl:(26)无法从文件/应用程序打开/读取本地数据
  • @ChinmayNayak 我修复了选项的顺序并添加了另一个解决方案,因为我刚刚找到了 --create-file-mode 选项。为了避免密码提示使用sshpass
  • 用创建文件模式尝试了更新的,但复制后没有改变文件权限。
  • @ChinmayNayak 请尝试所有建议的解决方案。我没有 SFTP 服务器,因此无法测试命令。在使用--create-file-mode 进行测试之前,您是否删除了目标文件?如果文件已存在,此选项可能不会更改权限。
猜你喜欢
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多