这是我的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}