2016-08-23 83 views
3

我正尝试使用perl Net :: SFTP :: Foreign将文件传输到远程主机。但是我在建立连接时通过$ sftp-> error获取错误消息。这个程序对其他远程主机工作正常。Perl Net :: SFTP ::使用密码验证的外部问题

错误消息:如预期 密码未请求:0

通讯的代码片段:

my %args = (password => $config->[$i]->{'PSWD'}, user => $config->[$i]->{'USERNAME'}, port => $config->[$i]->{'PORT'}, more => [-o => 'StrictHostKeyChecking no'], more => '-v'); 
$sftp = Net::SFTP::Foreign->new($config->[$i]->{'HOSTNAME'}, %args); 

详细日志(相关片):

debug1: SSH2_MSG_SERVICE_REQUEST sent 
debug1: SSH2_MSG_SERVICE_ACCEPT received 
debug1: Authentications that can continue: keyboard-interactive,password 
debug1: Next authentication method: keyboard-interactive 
Password authentication 

在此之后,程序以上述错误终止。

+0

手动连接到主机时,请求的密码是? – choroba

+0

@choroba,是的 - 它是手动连接时要求输入密码。此外,我可以在输入pwd后手动连接。 –

+1

尝试在'%args'中添加'expect_log_user => 1,more =>'-v''获取更多调试信息。另外我注意到'Net :: SFTP :: Foreign'的来源[没有那个错误信息](https://github.com/salva/p5-Net-SFTP-Foreign/search?utf8=%E2% 9C%93&q =密码+不是+请求+ as +期望值)(除了示例程序)。 –

回答

1

我很欣赏大家提供的支持。我终于能够解决这个问题。下面列出我的发现和解决方案以供参考!

问题在于来自远程主机的密码提示,它不是预期的格式。你可以在这里找到参考(查找password_prompt): http://search.cpan.org/~salva/Net-SFTP-Foreign-1.86/lib/Net/SFTP/Foreign.pm

我已经更新了我的sftp-> new语句,在args列表中有password_prompt,它解决了我的问题!

1

根据我个人的经验,Net :: SFTP :: Foreign的工作方式基于您连接的服务器的设置。

下面是我建议你去尝试的步骤:

尝试通过硬编码的主机,用户名,密码,端口连接(22是默认,或任何实际端口):

my %args = (user => "username", password => "password", port => 22, more => [-o => 'StrictHostKeyChecking no']); 

如果还是不行,请尝试以下操作:

my %args = (user => "username", password => "password", port => 22, more => [-o => 'StrictHostKeyChecking no', -o => 'PreferredAuthentications=password']); 

my %args = (user => "username", password => "password", port => 22, more => [-o => 'StrictHostKeyChecking no', -o => 'PreferredAuthentications=password,keyboard-interactive']); 

my %args = (user => "username", password => "password", port => 22, more => [-o => 'StrictHostKeyChecking no', -o => 'PreferredAuthentications=keyboard-interactive,password']); 

一旦这些连接字符串的一项工作,请尝试使用变量来代替硬编码值。

+0

它不适合我! –