ネットワーク機器のコンフィグバックアップをよく忘れちゃうよ!!!
という人のためにスクリプトで自動化する方法を軽くまとめてみました。
Telnetで繋がる機器
みんな大好きexpectの出番ですね!
expect系の記事はいっぱいあると思うので、今回はPerlモジュールを使う方法を紹介します。
まずはD社のPowerConnectのバックアップを取得するスクリプト
Net::Telnetでがんばればたいていなんとかできちゃいますが、けっこうたいへんです。
#!/usr/bin/perl use strict; use warnings; use Net::Telnet; #$Net::Telnet::DEBUG = 1; # プロンプト文字列の定義 my $prompt = '/User:$|Password:$|.*[>#]$|--More--/'; @ARGV ==3 or die "$0 host user pass"; my ($host, $user, $pass) = @ARGV; my $t = new Net::Telnet(Prompt => $prompt); $t->open($host); # ログインする。ログインパスワードあり、enableパスワードなしの場合 $t->cmd($user); $t->cmd($pass); $t->cmd("enable"); # running-configを取得 my @result = $t->cmd("show running-config"); while($t->last_prompt =~ /--More--/){ push @result ,$t->cmd(String => " ", Output_record_separator => ""); } $t->close; print grep !/^\s*$/,@result;
$ sudo cpan Net::Telnet $ perl backup.pl 192.168.1.1 nwadmin nwpass
Ciscoとか有名どころは専用のCPANモジュールがあってもっと簡単にできたりするので探してみましょう。
#!/usr/bin/perl use strict; use warnings; use Net::Telnet::Cisco; my $hostname = "sw1"; my $loginPass = "cisco"; my $enablePass = "cisco"; my $session = Net::Telnet::Cisco->new(Host => $hostname); $session->login(Password => $loginPass); if ($session->enable($enablePass)) { print $session->cmd("show running-config"); } else { warn "Can’t enable: " . $session->errmsg; } $session->close;
$ sudo cpan Net::Telnet::Cisco $ perl cisco_backup.pl
Juniper NetScreen,SSG
OSのバージョンにも依存しそうですが、手近にあったSSGだと以下の手順でいけました。
ssh鍵をDSAで作る
[mikeda@admin01 ~]$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/mikeda/.ssh/id_dsa): /home/mikeda/.ssh/id_dsa_ns Enter passphrase (empty for no passphrase): Enter same passphrase again: ... [mikeda@admin01 ~]$ cat ~/.ssh/id_dsa_ns.pub ssh-dss AAAAB3NzaSp08.....XUMnNZ8hjys= mikeda@admin01
ネットワーク機器にログインしてSSH関連設定
set ssh version v2 set ssh enable set scp enable set ssh pka-dsa user-name admin key AAAAB3NzaSp08.....XUMnNZ8hjys= save
これでパスワードなしでscpでバックアップが取れます
[mikeda@admin01 ~]$ scp -i ~/.ssh/id_dsa_ns admin@192.168.1.1:ns_sys_config .
取得できるのはフラッシュに保存済みのコンフィグなので、設定変更後の「save」は死んでも忘れないように!
YAMAHA RTX
RTX1200で確認したところSNMPでコンフィグが取得できるという鬼仕様なので、
ルータに設定入れて
snmp host 192.168.1.10 xxxyyyzzz
snmpwalkしてやればOKです・・・
[mikeda@cent ~]$ yum install net-snmp-utils [mikeda@cent ~]$ snmpwalk -v1 -cxxxyyyzzz 192.168.1.1 .1.3.6.1.4.1.1182.2.2.10.1.2 | tr -d '\r' | sed -n 's/^.*STRING: "//p' ... login password * administrator password * login user mikeda * console lines infinity console prompt rt01 login timer 1000 ...
Vyatta
だいじょうぶ、こいつはただのDebianです。
サーバと同じように鍵を通してやればパスなしでscpできるようになります
[mikeda@admin01 ~]$ ssh-keygen Enterオラオラ [mikeda@admin01 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub vyatta@192.168.1.1 [mikeda@admin01 ~]$ scp vyatta@192.168.1.1:/config/config.boot config.boot.20120705
リストアはバックアップをscpしてやって
[mikeda@admin01 ~]$ scp config.boot.20120705 vyatta@192.168.1.1:/config/config.boot.20120705
Vyatta側でloadしてやればOKです
vyatta@vyatta01:~$ configure vyatta@vyatta01# load /opt/vyatta/etc/config/config.boot.20120705 Loading configuration from '/config/config.boot.20120705'... Load complete. Use 'commit' to make changes active. vyatta@vyatta01# commit vyatta@vyatta01# save
まとめ
バックアップめんどくさいしよく忘れちゃうよ(*´Д`)ハァハァ、という人がいればぜひ自動化してみましょう。
他の機器とかも触る機会があったら追記していきます。