1

SCP 経由でリモート マシンにファイルを送信しようとする次のスクリプトを Perl で作成しました (Perl は初めてです)。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);

ただし、転送は行われないようです。さらに、エラーはスローされません。どこで間違ったのですか?

4

2 に答える 2

4

Net::OpenSSHまたはNet::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;
于 2013-10-05T10:36:25.820 に答える
3

これを試して:

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);

それがあなたのために働くかどうか知ってください..

于 2013-10-05T10:18:45.933 に答える