【问题标题】:Perl file transfer through Net::SFTP::Foreign thows error: password authentication not available通过 Net::SFTP::Foreign thows 的 Perl 文件传输错误:密码验证不可用
【发布时间】:2020-04-21 05:47:26
【问题描述】:

我已手动将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 命令手动传输文件时,它可以工作,但通过脚本却不行。

【问题讨论】:

    标签: perl sftp file-transfer


    【解决方案1】:

    底层进程(无论是 sftp 还是 scp 等)需要从 Perl 程序中获取密码。密码的传递不能破坏安全性,即必须通过伪终端传递。这就是为什么需要IO::Pty

    当您在终端中运行 sftp 时,它会分配一个伪终端来询问您的密码。这也解释了为什么你不能,例如将密码发送到命令的标准输入。

    【讨论】:

    • 既然模块Net::SFTP::Foreign是我手动添加的,我怎么能有IO::Pty模块层次结构?在metacpan 我可以看到Pty.pmIO-Tty 目录下。那么我可以在../lib 下创建一个目录IO-Tty 并遵循IO-Tty 中的层次结构。
    • 为什么不使用 CPAN 客户端?
    • 另外,IO::Pty 需要一个 C 编译器,因为它有一个 XS 组件。所以你可以以标准方式手动安装它:perl Makefile.PL && make && make install,但这正是 cpan 客户端所做的。
    • sftp 不分配任何伪终端。它只是使用它启动的终端与用户交互,它通过/dev/tty 打开。 ssh 可以分配一个伪终端(当它的标准输入是一个终端时,没有给出明确的命令等),但总是在 remote 机器上,从不在 local 机器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    相关资源
    最近更新 更多