Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- ###
- # Autor: Dawid Mocek
- # MZ Zabrze
- #
- #
- #
- use strict;
- use warnings;
- # /usr/ports/net/p5-Net-OpenSSH
- use Net::OpenSSH;
- # /usr/ports/net/p5-Net-Telnet
- use Net::Telnet
- # Stand. w PERL5
- use POSIX qw/strftime/;
- # /usr/ports/devel/p5-Config-IniFiles
- use Config::IniFiles;
- use constant DATE => scalar strftime('%Y-%m-%d', localtime);
- # Zastepuje . na - w stringu
- sub dot_replace {
- my $string = $_[0];
- $string =~ s/\./-/g;
- return $string;
- }
- # Zastepuje \s(spacja) i inne biale znaki w stringu
- sub space_replace {
- my $string = $_[0];
- $string =~ s/\s/_/g;
- return $string;
- }
- sub printn {
- print $_[0] . "\n";
- }
- sub dir_exists {
- my $dir = $_[0];
- if( -d $dir) {
- return 0;
- }
- return -1;
- }
- ###### W metodach capture(), capture2() itd TRZEBA podać pelne sciezki do binarek #######
- sub ssh {
- my $host = $_[0];
- my $user = $_[1];
- my $pass = $_[2];
- #lc = lowercase
- my $destdir = lc($_[3]);
- my $ssh = Net::OpenSSH->new($host, user => $user, passwd => $pass, timeout => 5, expand_vars => 1);
- if($ssh) {
- # Nazwa pliku wynikowego 7z na remote hoscie
- my $filename = DATE . ".7z";
- # Pelna sciezka pliku wynikowego 7z na remote hoscie
- my $filepath = "/home/dawid/".$filename;
- # Komenda na remote hoscie
- my $cmd = "/usr/local/bin/7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on ".$filepath." /home/dawid/*.jpg";
- # Wykonujmey komende. $out = StdOut zwrocony przez 7z na remote hoscie
- my $out = $ssh->capture($cmd);
- # Kod zwrocony przez proces 7z na remote hoscie
- my $exit_code = $?;
- if($exit_code == 0 && ($out =~ m/Everything\sis\sOk/)) {
- if(dir_exists($destdir) == 0) {
- # Pobieramy backup z remote hosta - zwiekszyc timeout jesli plik jest jebitnie duzy
- my $scp_ret = $ssh->scp_get({timeout => 15}, $filepath, $destdir . '/'. $filename);
- if($scp_ret) {
- # Kasujemy backup na remote hoscie
- $ssh->capture("/bin/rm " . $filepath);
- printn("[SUCCESS][SSH][SCP_GET][" . $host . "] Remote file: '" .$filepath ."' saved in local dir: '" .$destdir ."'");
- }
- else {
- printn("[ERROR][SSH][SCP_GET][" . $host . "] Strange. Connection timeout or file: '".$filepath."' was suddenly removed or chmod problem. More: ". $ssh->error);
- }
- }
- else {
- printn("[ERROR][SSH][SCP_GET][" . $host . "] Destination dir: '". $destdir ."' does not exists !");
- }
- }
- else {
- printn("[ERROR][SSH][CAPTURE][" . $host . "] Cmd: '" .$cmd ."' returned code: " . $exit_code . " !");
- }
- }
- else {
- printn("[ERROR][SSH][CON][" . $host . "] ". $ssh->error);
- }
- # Usuwamy obiekt z pamieci(rozlaczamy sie przy okazji)
- undef $ssh;
- }
- sub telnet {
- my $host = $_[0];
- my $user = $_[1];
- my $pass = $_[2];
- }
- sub load_ini {
- my $inifle = $_[0];
- my %ini;
- tie %ini, 'Config::IniFiles', (-file => $inifile, -fallback => "General");
- return %ini;
- }
- ############# MAIN ######################
- my $inifile = "/root/ips.ini";
- my %ini = load_ini($inifile);
- while(my($devicename, $data) = each(%ini)) {
- my $proto = $data->{"protocol"};
- if($proto =~ m/^ssh$/) {
- printn($proto ." to: " . $devicename);
- ssh($data->{'host'}, $data->{'user'}, $data->{'password'}, $data->{'destdir'});
- }
- elsif($proto =~ m/^telnet$/) {
- printn($proto . " to: " . $devicename);
- }
- else {
- printn("unknow protocol: " . $proto . " in section: " .$devicename);
- }
- }
- exit 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement