1

我在我的 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失败,而没有对我抛出任何错误。

4

6 回答 6

3

我正在对您的评论做出反应“我需要在 Windows 机器上安装其他任何东西才能使这个库正常工作吗?” 这里。

自述文件指出您需要有一个可从 PATH 访问的外部 SSH2 客户端。这可能是问题吗?已知该模块可在 Windows 上运行。

于 2010-02-25T15:47:37.040 回答
2

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

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

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

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

于 2010-02-25T19:36:34.123 回答
2

您还可以在构造函数的 %args 中将“调试”设置为 1

来自Net::SFTP::Foreign 文档

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

编辑:试试 $Net::SFTP::Foreign::debug = 1;

从 1.56_04 版本的来源:

我们将 $Net::SFTP::Foreign::Helpers::debug 设为 $Net::SFTP::Foreign::debug 的别名,这样用户就可以在不了解 Helpers 包的情况下设置它!

我们的 $debug;

于 2010-02-25T16:30:56.673 回答
2

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

我的 $sftp = Net::SFTP::Foreign->new("$host",
                                     用户=>$tt->get_location_user_name(),
                                     密码=>$tt->get_location_user_password(),
                                     端口=>'22');
于 2010-02-25T15:36:29.640 回答
1

在 Windows 上运行 Net::SFTP::Foreign 的最佳方式是使用 Net::SSH2。使用这个包允许支持密码以及所有其他功能,否则这些功能在 Linux 和 Unix 平台上本机支持。

更多信息和基本实现(带代码)很好地解释了:https ://metacpan.org/pod/Net::SFTP::Foreign::Backend::Net_SSH2

于 2013-12-27T10:02:56.403 回答
1

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

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

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

于 2010-02-25T17:38:28.383 回答