如何在Windows上使用Perl的Net :: SFTP :: Foreign?

时间:2010-02-25 15:26:22

标签: perl sftp

我在perl 5.8.8中安装了Net::SFTP::Foreign,我正在尝试使用以下代码登录安全FTP服务器:

use Net::SFTP::Foreign;
my $host = $tt->get_ftp_server_address();
my $sftp = Net::SFTP::Foreign->new("$host",
                                     {user=>$tt->get_location_user_name(),
                                     password=>$tt->get_location_user_password(),
                                     port=>'22'});

我试图调用Net::SFTP::Foreign->new的行失败而不会对我造成任何错误。

6 个答案:

答案 0 :(得分:3)

我正在对您的评论做出反应“我是否需要在Windows计算机上安装其他任何内容才能使此lib正常运行?”此处。

readme个状态,您需要从PATH 可以访问外部SSH2客户端。这可能是问题吗?该模块known可以在Windows上运行。

答案 1 :(得分:2)

我认为构造函数期望哈希表而不是哈希引用。尝试删除通话中的大括号:

my $sftp = Net::SFTP::Foreign->new("$host",
                                     user=>$tt->get_location_user_name(),
                                     password=>$tt->get_location_user_password(),
                                     port=>'22');

答案 2 :(得分:2)

您还可以在%args中将'debug'设置为1到构造函数

来自Net::SFTP::Foreign doc

  

debug => 1如果设置为真值,   将打印调试消息   出。默认值为false。

修改: 尝试 $Net::SFTP::Foreign::debug = 1;

从1.56_04版本的来源:

  

我们为$ Net :: SFTP :: Foreign :: Helpers :: debug一个别名   $ Net :: SFTP :: Foreign :: debug,以便用户可以不设置它   了解Helpers包的任何信息!

     

我们的$ debug;

答案 3 :(得分:2)

除了打开调试的可能性外,请注意the documentation明确指出:

  

在构造函数调用之后,应始终包含对错误的显式检查:

my $sftp = Net::SFTP::Foreign->new(...);
$sftp->error and die "SSH connection failed: " . $sftp->error;

因此,打印出该错误消息将是诊断问题的第一步。

答案 4 :(得分:1)

除非您使用Cygwin Perl,否则Windows不支持密码身份验证。您还必须安装Expect。

开发版本(目前为1.56_08)可以与Net :: SSH2一起使用,因此您可以获得丰富的SFTP客户端和密码验证。

Net :: SFTP :: Foreign也可以使用plink(Putty附带的实用程序),该组合支持Windows下的密码验证,但不完全安全。

答案 5 :(得分:1)

在Windows上运行Net :: SFTP :: Foreign的最佳方法是使用Net :: SSH2。 使用此软件包可以支持密码以及所有其他功能,这些功能在Linux和Unix平台上原生支持。

更多信息和基本实现(带代码)在https://metacpan.org/pod/Net::SFTP::Foreign::Backend::Net_SSH2

上得到了很好的解释