• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:パスワードを外部ファイルから読み込む)

外部ファイルからパスワードを読み込む方法を教えてください

このQ&Aのポイント
  • perlを使用して複数のcisco機器にログインし、show clockコマンドを実行する際に、外部ファイルからパスワードを読み込む方法を教えてください。
  • ログインパスワードは定期的に変更されているため、外部ファイルを参照することで管理を容易にすることが目的です。
  • Net::Telnet::Ciscoを使用してIPアドレスとログイン情報を指定してログインし、show clockコマンドを実行後、結果をテキストファイルに保存する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • umomo3
  • ベストアンサー率100% (2/2)
回答No.2

Telnetログインできる機器であれば Net::Telnetモジュールを使用すれば、ユーザ名が聞かれても ログインしコマンドを実行することが可能です。 (SSHであればNet::SSHってのもあります。) (例) #!/usr/bin/perl use strict; use warnings; use Net::Telnet; my $host = "hostname"; my $pass = "password"; #ホストに接続しログイン my $telnet = new Net::Telnet(Timeout => 10); $telnet->open($host); $telnet->login($user,$pass); #コマンド実行(dateコマンドを実行) my @result = $telnet->cmd("date"); print "@result\n"; #ログアウトし切断 $telnet->cmd("exit"); $telnet->close; exit; ※使い方の詳細はperldocやcpanで確認してください。

fana123
質問者

お礼

ご回答有難う御座います。 Net::Telnetを使うのも一つなんですね。 参考にさせて頂きます。 有難う御座いました。

その他の回答 (1)

  • umomo3
  • ベストアンサー率100% (2/2)
回答No.1

パスワードを外部ファイルから読み込むだけなら open(PASS,"<./password.txt"); @hoge = <PASS>; $pass = $hoge[0]; こんな感じで読み込むことも可能ですが、自分だったら ホスト名、IPアドレス、パスワードも外部ファイルから 読み込むように書きます。 #********************************************************** ■外部ファイル ○下記の形式で記述 ホスト名:  - IPアドレス  - パスワード ※'-'の前後に半角スペースが必要! #(例) list.yaml hostname1:  - 192.168.111.111  - password1 hostname2:  - 192.168.111.112  - password2 hostname3:  - 192.168.111.113  - password3 ※半角スペースが抜けていたり、不要なスペースが入っていると  読み込み時にエラーが発生するので注意! #********************************************************** ■Cisco機器へTelnet ○ホスト名毎にログを書き出す #!/usr/bin/perl use strict; use warnings; use Net::Telnet::Cisco; use YAML; use Data::Dumper; ############################################ # hostname,ipaddress,password read file ############################################ my $host = YAML::LoadFile('./list.yaml'); #print Dumper($host); ############################################ # telnet in each host ############################################ foreach my $hostname(keys(%{$host})){ my $ip = $host->{$hostname}[0]; my $pass = $host->{$hostname}[1]; print "$hostname ..."; &telnet_cisco($hostname,$ip,$pass); print "done\n"; } ############################################# # Net::Telnet::Cisco sub ############################################# sub telnet_cisco { my ($hostname,$ip,$pass) = @_; my $session = Net::Telnet::Cisco->new( Host => $ip, Timeout => 10, ); $session->login('login',$pass); my @result = $session->cmd("show clock"); $session->close; chomp(@result); open(LOG,">>./$hostname.txt"); foreach my $value(@result){ print LOG "$value\n"; } close(LOG); } exit; ※エラー処理は書いてないので適度に入れてください。 参考になったかな。。。

fana123
質問者

お礼

ご回答有難うございます。 open(PASS,"<./password.txt"); @hoge = <PASS>; $pass = $hoge[0]; で実行したところ、うまくperlが走りました。有難うございます。 機器によっては、user名をパスワード入力前に聞いてくるものがあります。それにはどのように対応すればよろしいでしょうか。 それほど数がないので、ご返信頂いたように外部ファイルを見に行かないで、perl内にuser名を明記しようと考えています。 再度ご教授頂けたら幸いです。

関連するQ&A