Perl 스크립트에 매우 익숙하며 라우터에 ssh에 perl 코드를 작성한 다음 라우터에서 scp export 명령을 실행합니다 (scp에서 라우터로 원격 대상 서버).
#!/usr/local/bin/perl
use Net::SSH::Expect;
use warnings;
$hostname = "Router";
my $ssh = Net::SSH::Expect->new (
host => $hostname,
password=> 'abcd',
user => 'admin',
raw_pty => 1,
timeout => 150,
);
my $login_output = $ssh->login();
if ($login_output !~ /Router/) {
die "Login has failed. Login output was $login_output";
}
$ssh->send("scp export log traffic start-time equal 2013/04/01\@00:00:00 to user\@192.168.1.1:<path> end-time equal 2013/04/01\@01:00:00",3);
$ssh->waitfor('[email protected]\'s password:\s*') or die "prompt 'password' not found";
$ssh->send("abcd");
$ssh->send("\n");
sleep 100;
my $logout = $ssh->close();
print "=" x 50;
print "\n";
나는 스크립트를 라우터에 잘 보았습니다 (스크립트를 실행할 때마다 라우터에서 새 사용자를 볼 수 있습니다). 그러나 몇 초 후에 스크립트가 오류로 종료됩니다. SSHProcessError ssh 프로세스가 종료되었습니다. cron1 줄에서 22
22 번째 줄에는 $ ssh-> waitfor ('[email protected] \'s password : \ s * ') 또는 "prompt'password 'not found"가 죽습니다.
Net :: SSH :: 기대는 완전히 신뢰할 수 없습니다. 대신 [Net :: OpenSSH] (https://metacpan.org/module/Net::OpenSSH)를 사용하십시오. 대신 [Expect] (https://metacpan.org/module/Expect)와 함께 사용해보십시오. – salva
감사합니다. salva. Net :: OpenSSH (Net :: SSH :: Expect 외에도)를 사용했지만 오류는 동일하게 유지됩니다. 어떤 아이디어? – user1500970
실제 코드를 보지 않고도 알기 어렵습니다. 'sleep 100'은 원격 측에서 시간 초과를 유발할 수 있습니다. – salva