如何在远程文件上使用chmod?

时间:2019-06-13 15:39:51

标签: c++ unix sftp 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");

1 个答案:

答案 0 :(得分:1)

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

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

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

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