Perl передача файла через Net :: SFTP :: Иностранные ошибки: аутентификация по паролю недоступна - PullRequest
1 голос
/ 20 апреля 2020

Я вручную добавил Net::SFTP::Foreign файлы модулей (поскольку у меня нет доступа для установки модулей perl) в мой текущий рабочий каталог. Мой сценарий передачи SFTP показан ниже:

#!/usr/bin/perl -I/home/vinod/scripts/sftp_test/lib

use strict;
use warnings;

use Net::SFTP::Foreign;

print "Starting the script execution\n";

my ($hostip, $username, $password) = ("xx.xxx.xxx.xxx", "user", "password");

my $rdir = "/home/shared_dir/Vinod";
my $fullfilename = "/home/vinod/scripts/sftp_test/abc.txt";

my $sftp = Net::SFTP::Foreign->new(host=>$hostip , user=>$username , password=>$password, more=>[qw(-v -o PreferredAuthentications=password)]) or die "Cannot open remote file list connection: $!";

$sftp->setcwd($rdir) or die "unable to change cwd: " . $sftp->error;

$sftp->put("$fullfilename", "$rdir/xyz.txt") or die "put failed: " . $sftp->error;

$sftp->disconnect;

print "Done\n";

Но этот сценарий выдает мне ошибку:

Starting the script execution
password authentication not available, IO::Pty is not installed or failed to load: Can't locate IO/Pty.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 . /home/vinod/scripts/sftp_test/lib) at /home/vinod/scripts/sftp_test/lib/Net/SFTP/Foreign/Backend/Unix.pm line 256.
 at test.pl line 17

Является ли эта ошибка из-за того, что модуль IO::Pty не установлен.

Когда я вручную передаю файлы с помощью команды sftp, это работает, а через сценарий - нет.

1 Ответ

2 голосов
/ 20 апреля 2020

Базовый процесс (будь то sftp из scp или любой другой) должен получить пароль от программы Perl. Передача пароля не может нарушить безопасность, то есть она должна быть передана через псевдо-терминал. Вот почему IO :: Pty требуется.

Когда вы запускаете sftp в терминале, он выделяет псевдотерминал, чтобы запросить у вас пароль. Это также объясняет, почему вы не можете, например, отправить пароль на стандартный ввод команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...