【问题标题】:SCP using perl script to transfer filesSCP使用perl脚本传输文件
【发布时间】:2013-10-12 07:58:52
【问题描述】:

我用 Perl 编写了以下脚本(我是 Perl 新手),它尝试通过 SCP 将文件发送到远程机器。我正在尝试使用 Expect 传递密码。到目前为止的脚本如下所示:

#!/usr/bin/perl

use Net::FTP;
use Net::SCP;
use Net::SCP::Expect;
sub scp_backup{
        $n = scalar(@_);
        if ($n == 7)
        {        my $scp_conn = Net::SCP->new($ip, $username) or die "\nCan't open $ip";
                 #die
                 my $dest="/my/remote/location/";
                 my $testfile = "/pah/to/my/file/testing.txt";
                 unless ($scp_conn->scp($testfile => $dest))
                 {       my $scp_conn_ex = Net::SCP::Expect->new;
                         $scp_conn_ex->login($username, $password);
                 }

        }
        else
        {
                print "\nNot enough args\n\n";
        }
        print "\nTotal items passed:$n\n";
}


$name = "testuser";
$tfr_type = "scp";
$ip = "XX.XX.XX.XX";
$username = 'testuser_name';
$password = 'testpass';
&scp_backup($name, $tfr_type, $ip, $username, $password);

但是,转移似乎没有发生。此外,不会引发任何错误。我哪里出错了?

【问题讨论】:

  • 您是否有充分的理由通过密码而不是私钥进行身份验证?
  • @michas - 这是因为用户可以选择选择任一选项 - 私钥或密码。

标签: perl perl-module scp


【解决方案1】:

使用Net::OpenSSHNet::SSH::Any

use Net::OpenSSH;
my $ssh = Net::OpenSSH->new($host, user => $user, password => $password);
$ssh->scp_put($local_path, $remote_path)
    or die "scp failed: " . $ssh->error;

【讨论】:

    【解决方案2】:

    试试这个:

    use Net::FTP;
    use Net::SCP;
    use Net::SCP::Expect;
    sub scp_backup{
            $n = scalar(@_);
            if ($n == 7)
            {           my $dest="/my/remote/location/";
                        my $testfile = "/pah/to/my/file/testing.txt";
    
                        my $scpe = Net::SCP::Expect->new(
                               host => $ip,
                               user => $username,
                               password => $password,
                               auto_yes => 1,
                               verbose  => 1,
                               debug    => 1,
                               timeout_auto => 2,
                            );
                            die "can't scp: $!\n" unless $scpe->scp($testfile, $dest);
            }
            else
            {
                    print "\nNot enough args\n\n";
            }
            print "\nTotal items passed:$n\n";
    }
    $name = "testuser";
    $tfr_type = "scp";
    $ip = "XX.XX.XX.XX";
    $username = 'testuser_name';
    $password = 'testpass';
    &scp_backup($name, $tfr_type, $ip, $username, $password);
    

    让我知道这是否适合你..

    【讨论】:

    • 仍然没有理由使用& 调用您的 scp_backup 子例程——参见stackoverflow.com/questions/1347396/…
    • 谢谢,但 Net::SCP::Expect 仅适用于远程到本地和本地到远程。我想要一些也适用于远程到远程的东西。
    猜你喜欢
    • 2010-11-23
    • 2011-04-19
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    • 2017-04-06
    • 2011-04-15
    相关资源
    最近更新 更多