如何使用Net :: SFTP :: Foreign在SFl中连接SFTP?

时间:2017-01-16 04:59:05

标签: perl sftp

这是我的Perl测试代码:

use Net::SFTP::Foreign;
use strict;

print "starting test...\r\n";

my $sftp = Net::SFTP::Foreign->new(
    host => "xxx",
    user => "xxx",
    password => "xxx",
    timeout => 30);

$sftp->error and die "unable to connect to remote host: " . $sftp->error;

如果我在旧服务器上运行它,它可以正常工作。您看到starting test...然后脚本退出。

最初,当我在新服务器上运行时,我遇到了错误:Can't authenticate password because Expect isn't installed

然后我使用此命令安装了Expect:

perl -MCPAN -e 'install Bundle::Expect'

然后我再次运行脚本,我没有看到错误,但它只是在starting test...之后永远挂起。

那么我怎么能解决这个问题或者告诉我什么是错的?

此外,由于我让它挂了一两分钟,我无法再登录到服务器。

修改

这是设置调试时的输出:

#11819 1484555093.00000 _init_transport: ssh cmd: ssh -o NumberOfPasswordPrompts=1 -o PreferredAuthentications=keyboard-interactive,password -l Jon Doe 22.222.22.2 -s sftp

编辑2:

如果我使用strace运行它,那么在它挂起之前的最后10行:

fcntl(9, F_SETFD, FD_CLOEXEC)           = 0
fcntl(10, F_SETFD, FD_CLOEXEC)          = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fdc465c0a10) = 18175
close(10)                               = 0
read(9, "", 8192)                       = 0
close(9)                                = 0
close(5)                                = 0
close(8)                                = 0
select(8, [3], NULL, NULL, {120, 0}

0 个答案:

没有答案