通过Cygwin从web服务进行的SFTP失败



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

我遇到的问题是SFTP本身——当我以D:cygwinbinbash.exe -c "/usr/bin/sftp -oIdentityFile=[privateKeyPath] -oStrictHostKeyChecking=no -b /cygdrive/d/WD/temp/list_SFTP.sh [user]@[hostname]"的形式从cmd手动运行部分测试时,或者调用与web完全相同的Perl文件集时,它可以正常工作(返回文件列表(。当完全相同的代码在网页上运行时,它会很快失败,并且不会告诉任何事情。我只有错误代码255和"0";连接关闭";。没有错误流,没有详细的输出,什么都没有,无论我用什么方式捕获任何错误。

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

当直接从cmd或通过Perl手动运行时,D:cygwinbinbash.exe -c "env"会将HOME报告为HOME=/cygdrive/c/Users/[username]/当通过网页运行时,该命令报告HOME=/,即root,显然在路径的某个位置丢失了HOME。

有了这些知识,解决方案很简单:用正确的主路径(例如D:cygwinbinbash.exe -c "export HOME=/cygdrive/c/Users/%USERNAME%/ ; /usr/bin/sftp -oIdentityFile=[privateKeyPath] -oStrictHostKeyChecking=no -b /cygdrive/d/WD/temp/list_SFTP.sh [user]@[hostname]"(准备SFTP命令,就可以开始了。

最新更新