我在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
的行失败而不会对我造成任何错误。
答案 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到构造函数
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
上得到了很好的解释