从 Web 服务通过 Cygwin 的 SFTP 失败

问题描述

我有一个在 Apache 上运行的网页,它使用一组成熟的 Perl 文件来监控我们的工作场所服务器和应用程序。其中一项测试通过 Cygwin 的 SFTP,在那里列出文件并对其进行评估。

我遇到的问题是 SFTP 本身 - 当我从 cmd 手动运行部分测试作为 D:\cygwin\bin\bash.exe -c "/usr/bin/sftp -oIdentityFile=[privateKeyPath] -oStrictHostKeyChecking=no -b /cygdrive/d/WD/temp/list_SFTP.sh [user]@[hostname]"调用 非常相同的 Perl 文件作为网络它工作正常(返回文件列表,因为它应该)。当通过网页运行完全相同的代码时,它会很快失败并且不会告诉任何内容。我唯一拥有的是错误代码 255 和“连接已关闭”。没有错误流,没有冗长的输出,什么都没有,不管我用什么方法来捕获任何错误

解决方法

长话短说,罪魁祸首是 HOME 路径。

当直接从 cmd 或通过 Perl 手动运行时,D:\cygwin\bin\bash.exe -c "env" 会将 HOME 报告为 HOME=/cygdrive/c/Users/[username]/ 但是当通过网页运行报告时,同样的命令{{1} } ie root,显然在路径上的某个地方失去了家。

有了这些知识,解决方案就很简单:在 SFTP 命令前面加上正确的主路径(例如 HOME=/),您就可以开始了。