首页 > 解决方案 > 如何在远程文件上使用 chmod?

问题描述

我在家里设置了一个使用 FreeBSD 11.0 的 SFTP 服务器,并且我正在编写一个程序,该程序也可以进行简单的权限更改。如何更改远程主机上的文件权限?

我已经尝试在所有地方寻找既方便用户又可以支持这一点的库,但无济于事,它们不符合我的标准。我决定尝试编写自己的支持,但我不知道如何实现这一点。

我想做的伪代码:

void setFlags (short flags) {
    // Set remote file's permissions based on flags (example flag: 744)
    FILE *rfile = fopen ("/remote/file/path.txt", 'w');
    chmodRemote (rfile, flags);
    fclose (rfile);
}

编辑:我不想用system ("foo");这个。

标签: c++unixsftpchmod

解决方案


经过这么长时间,我想出了一个解决方案。

  1. sys/socket.h使用其设置的端口(默认 22,SSH 端口)连接到 SFTP 站点。您选择的加密技术(对称加密、非对称加密和散列)必须由您设置,但是如果您选择手动执行此过程,因为这就是 SSH 使目标设备上的解密成为可能的方式,所有这些(和数据包格式)在这里解释。您可能还想了解如何通过会话检索数据。

  2. 发送一个包含所有所需元数据的数据包,因为这是一个 shell 会话(a la “FTP over SSH”)。这也是发送其他命令的方式。

请注意,如果您想向后兼容 FTP,则需要参考原始 FTP 命令列表,因为旧版本不使用 shell 数据包;为此,您将需要SITE命令(后跟服务器的命令和参数),没有周围的绒毛,只有原始数据。


推荐阅读