【问题标题】:Perl Net::SFTP::Foreign issue with password authenticationPerl Net::SFTP::Foreign 密码验证问题
【发布时间】:2019-01-30 16:13:28
【问题描述】:

我正在尝试使用 perl Net::SFTP::Foreign 将文件传输到远程主机。但是在建立连接时,我通过 $sftp->error 得到以下错误消息。该程序适用于其他远程主机。

错误信息: 未按预期要求输入密码: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

此后,程序因上述错误而终止。

【问题讨论】:

  • 手动连接主机时,是否要求输入密码?
  • @choroba,是的 - 它在手动连接时要求输入密码。输入密码后我也可以手动连接。
  • 尝试将expect_log_user => 1, more => '-v' 添加到%args 以获取更多调试信息。我还注意到Net::SFTP::Foreigndoesn't have that error message 的来源(除了在示例程序中)。
  • @DravSloan - 我试过expect_log_user,它给出了密码提示,但输入密码后结果相同。
  • @DravSloan - 我已将详细日志中的相关部分添加到问题中,请查看。

标签: perl


【解决方案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']);

一旦这些连接字符串之一工作,尝试用您的变量替换硬编码值。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      相关资源
      最近更新 更多