Perl 从web服务到Cygwin的SFTP失败

Perl 从web服务到Cygwin的SFTP失败,perl,cygwin,sftp,Perl,Cygwin,Sftp,我有一个在Apache上运行的网页,它使用一组成熟的Perl文件来监控我们的工作场所服务器和应用程序。其中一个测试通过Cygwin的SFTP,列出文件并进行评估 我遇到的问题是SFTP本身——当我以D:\cygwin\bin\bash.exe-c”/usr/bin/SFTP-oIdentityFile=[privateKeyPath]-ostrichostKeyChecking=no-b/cygdrive/D/WD/temp/list\u SFTP.sh[user]@[hostname]”的形式

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


我遇到的问题是SFTP本身——当我以
D:\cygwin\bin\bash.exe-c”/usr/bin/SFTP-oIdentityFile=[privateKeyPath]-ostrichostKeyChecking=no-b/cygdrive/D/WD/temp/list\u SFTP.sh[user]@[hostname]”的形式手动运行部分测试时,或者在web正常运行时调用非常相同的Perl文件集(返回它应该返回的文件列表)。当在网页上运行完全相同的代码时,它会很快失败,并且不会告诉任何事情。我唯一拥有的是错误代码255和“连接已关闭”。没有错误流,没有详细的输出,没有任何内容,无论我使用何种方式捕获任何错误。

长话短说,罪魁祸首是HOME path

当直接从cmd或通过Perl手动运行时,
D:\cygwin\bin\bash.exe-c“env”
将报告HOME为
HOME=/cygdrive/c/Users/[username]/
,但当通过网页报告
HOME=/
即root时,显然在路径的某个地方失去了HOME


有了这些知识,解决方案很简单:在SFTP命令前面加上正确的主路径(例如,
D:\cygwin\bin\bash.exe-c“export home=/cygdrive/c/Users/%USERNAME%/;/usr/bin/SFTP-oIdentityFile=[privateKeyPath]-ostrichostKeychecking=no-b/cygdrive/D/WD/temp/list\u SFTP.sh[user]@[hostname],
)您可以开始了。

您对问题的描述没有那么多细节,但听起来您正在运行一个web服务器并询问它。通常,web服务器不是以普通用户的身份运行的,它使用的用户不会设置主目录,也不会有用户的交互式登录环境。是的,您是正确的在我所做的事情中,但最令人费解的事情(至少对我来说)是当我通过同一个Perl程序运行相同的命令时(在同一个用户下-没有在问题中指定以保持简单)一次通过web和一次通过cmd得到了如此不同的结果。正如我所说的,交互会话用户和web用户是不同的。这就是为什么会得到不同的结果。