我在家中设置了一个使用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");
。
答案 0 :(得分:1)
经过这么长时间,我想出了一个解决方案。
使用 sys/socket.h
在其设置的端口(默认为 22,SSH 端口)下连接到 SFTP 站点。您选择的加密技术(对称加密、非对称加密和散列)必须由您设置,但是如果您选择手动执行此过程,因为这就是 SSH 在目标设备上进行解密的方式,所有这些(和数据包格式)解释here。您可能还想了解如何通过会话检索数据。
发送一个包含所有所需元数据的数据包,因为这是一个 shell 会话(一个“SSH 上的 FTP”)。这也是发送其他命令的方式。
注意,如果你想向下兼容FTP,你需要参考a raw FTP commands list,因为旧版本不使用shell包;为此,您将需要 SITE
命令(后跟服务器的命令和参数),没有周围的绒毛,只有原始数据。