2016-08-23 85 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

它不適合我! –