调用ssh2命令的Perl脚本无法在Windows任务调度器中返回输出

我可以从命令行运行Perl脚本没有任何问题,但是当我尝试通过使用Windows任务pipe理器(64位Windows 2008 Server)自动执行此任务时,SSH / SSH2的输出不能写入outfile。 这是一个Perl脚本,它做这样的事情:

my $DB_FILE1=$PATH . "\\FSBusinessUtil_" . $hostfqdn . $DATE; open( OUTFILE, ">$DB_FILE1" ) or die "Could not open data file "; print OUTFILE "FilesystemInfo\n"; my $output1=`$SSH_PATH\\ssh $user\@$hostname NAS_DB=/nas /nas/bin/./nas_fs -list`; if($? != $RC_OK){ open( OUT1FILE, ">$PATH\\errFSBusinessUtil_$hostfqdn$DATE"); print OUT1FILE localtime(time) . " Remote ssh failed to create $DB_FILE1. Error: $output1\n"; close OUT1FILE; } else { $output1=~ s/%%%/\n/g; print OUTFILE $output1; } close OUTFILE; 

Perl脚本本身被Windows任务计划程序调用,但在输出文件中,我看到的只是脚本在调用ssh命令之前打印的“FilesystemInfo”行。 除此之外,该命令确实失败了,因为我看到了生成的错误文件。 但是,仍然,$ output1是空的,所以除了“远程SSH创build失败…错误:”。

通常会出现这种问题,因为手动运行程序和从调度程序运行时使用的环境是不同的。 ssh是特别明智的,因为它将用户和主机密钥存储在用户文件夹的文件中。

你应该尝试的第一件事就是在调试模式下从脚本运行ssh:

 ssh -vvv ... 

另一种可能性是使用Net :: SSH2 ,它不使用环境中的任何信息,因此不会受到这种问题的影响。

在预定的VBscript中运行SCP和SSH时,我遇到了类似的问题。 检查“以最高的权限运行”伎俩。