如何对远程文件使用 chmod?

How can I use chmod on remote files?

我在家里设置了一个使用 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");

想了这么久终于想出办法了

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

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

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