我有一个在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";连接关闭";。没有错误流,没有详细的输出,什么都没有,无论我用什么方式捕获任何错误。
当直接从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命令,就可以开始了。