9.1.1. いまどきtelnetかよ・・・に対応したい 私も作っていて思いました。 いまどきtelnetかよ・・・。 そこで、今回はSSHへのconnectについて対応します。 でも、普通にtelnetをSSHに変えただけでは面白くないので、SSHもtelnetも両方いけるマクロにしてしまいましょう。
9.1.1.1. SSHについて
これまでconnectの方式はtelnetを使用していました。 telnetは通信内容が平文で送られることから、セキュリティを重視する運用ポリシを持つシステムでは、telnetを使用することを禁止していたりします。 よって、telnetの代わりに暗号化に対応しているSSHを使うことが非常に多いと言えます。 SSHもバージョン1はセキュアではないので、SSHを使う場合はバージョン2のみ、としているシステムも多く存在します。 しかし、SSHだったらなんでもいいよね的な雰囲気もまだまだ色濃く残っており、バージョン2だけでの接続で固定してしまうと、汎用性が低くなるかもしれません。 ですので、クライアント側はsshのバージョンを指定しない感じで書いていきたいと思います。 Tera TermのSSH認証は公開鍵認証とパスワード認証に対応していますが、今回はパスワード認証で書いてみたいと思います。9.1.1.2. 元になるマクロ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
;================================= ;fileopenでlist.txtを開き、FHに格納 ;================================= fileopen FH 'list.txt' 0 ;================================= ;whileでループを開始する ;================================= while 1 ;================================= ;filereadlnでFHから読み出し ;LINEに格納 ;================================= filereadln FH LINE ;================================= ;ifを使って、ファイルの最後まで来たら、 ;マクロのループから抜ける ;================================= if result=1 then break endif ;================================= ;LINEにIPアドレスが格納されたので、 ;LINEをIP_ADDRに代入する ;================================= IP_ADDR = LINE ;================================= ;変数格納 ;================================= PWD = 'cisco123' ;IPアドレスに必要なオプションを追加する strconcat IP_ADDR ':23 /nossh /T=1' ;================================= ;telnet接続、ログ保存ディレクトリ ;================================= connect IP_ADDR getdir DIR changedir DIR ;================================= ;ログ保存名の確定 ;================================= getdate DATE '%Y%m%d-%H%M%S.log' SHRUN = 'show_run_' SHLOG = 'show_log_' strconcat SHRUN DATE strconcat SHLOG DATE ;================================= ;show runのログを取得 ;================================= logopen SHRUN 0 0 wait '>' pause 3 sendln 'en' wait 'Password' pause 3 sendln PWD wait '#' pause 3 sendln 'terminal length 0' wait '#' pause 3 sendln 'show run' pause 5 sendln '' wait '#' logclose ;================================= ;show logのログを取得 ;================================= logopen SHLOG 0 0 sendln 'show log' pause 5 sendln '' wait '#' sendln 'exit' logclose pause5 ;================================= ;ここでループ元に戻る ;================================= endwhile ;================================= ;FHを無効化する ;================================= fileclose FH end |
かなり行数が増えてしまって、コメントが若干うざい感じになっていますが、振り返りやすいことがこのブログの売りだと思っているので、このまま進めていきたいと思います。
9.1.2. SSH対応を追加する
telnetのconnectも使えるようにしておきたいので、今回はtelnetのconnectを残しながら、SSHのコマンドも追加していきたいと思います。9.1.2.1. 入れ込むSSHコマンド
今回のマクロでは、使用するプロトコルをあらかじめ、マクロ内で指定しておくことによって、telnetとSSHを使い分けるような形にしたいと思います。 PORT変数を書いて、そこに22が書かれていたらSSH、それ以外の数字が書かれていたら、そのポート番号に対してtelnetとしたいと思います。 追加したいコマンドはこんな感じです。
1 2 3 4 5 6 7 |
;================================= ;22ならSSH、その他ならそのポート番号にtelnet ;USER変数にSSH様のusernameを書きます ;================================= PORT=22 USER='sshuser' |
PORTが22ならSSH、それ以外ならtelnetなので、PORT変数をうまく使ってif分岐させます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
;================================= ;PORTに22が書いてあれば、SSH ;elseはその番号に応じてtelnet ;PORTの型は整数なので、 ;int2str関数で文字列に変換し ;PORT_STR変数に格納する ;================================= if PORT=22 then strconcat IP_ADDR ' /ssh /auth=password /user=' strconcat IP_ADDR USER strconcat IP_ADDR ' /passwd=' strconcat IP_ADDR PWD connect IP_ADDR else strconcat IP_ADDR ':' int2str PORT_STR PORT strconcat IP_ADDR PORT_STR strconcat IP_ADDR ' /nossh /T=1' connect IP_ADDR wait 'Password:' sendln PWD endif |
SSHの場合はログインまで進みますので、
1 |
wait 'Password:' |
の部分が不要になります。 ですのでtelnetの時に必要なので、else以下に入れ込んでおくことにします。 さらに今回新たに
1 |
int2str |
という新しいコマンドをさらっと登場させています。 これは整数型と呼ばれるデータの型式を文字列に変換させるコマンドです。 当BLOGではあまりデータの型については触れていませんが(というかまったく・・・)、数値型と文字列型はstrconcatで合体できないのです。 詳しく解説し始めると私の力量がばれてしまいますので、今回はここら辺にしておいていただきますが、マクロを使っていて型式が違う場合、 Type mismatch ERROR みたいなエラーメッセージが出るので、そんな時は型式を変更するといいです。 ちなみに、この記事を書いているときのマクロ検証でもばんばん出ました。
9.1.2.2. マクロ化する
さて早速マクロ化していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
;================================= ;PORTが22ならSSH、その他ならそのポート番号にtelnet ;USER変数にSSH用のusernameを書く ;================================= PORT=22 USER='sshuser' ;================================= ;fileopenでlist.txtを開き、FHに格納 ;================================= fileopen FH 'list.txt' 0 ;================================= ;whileでループを開始する ;================================= while 1 ;================================= ;filereadlnでFHから読み出し ;LINEに格納 ;================================= filereadln FH LINE ;================================= ;ifを使って、ファイルの最後まで来たら、 ;マクロのループから抜ける ;================================= if result=1 then break endif ;================================= ;LINEにIPアドレスが格納されたので、 ;LINEをIP_ADDRに代入する ;================================= IP_ADDR = LINE ;================================= ;変数格納 ;================================= PWD = 'cisco123' ;================================= ;PORTに22が書いてあれば、SSH ;elseはその番号に応じてtelnet ;PORTの型は整数なので、 ;int2str関数で文字列に変換し ;PORT_STR変数に格納する ;================================= if PORT=22 then strconcat IP_ADDR ' /ssh /auth=password /user=' strconcat IP_ADDR USER strconcat IP_ADDR ' /passwd=' strconcat IP_ADDR PWD connect IP_ADDR else strconcat IP_ADDR ':' int2str PORT_STR PORT strconcat IP_ADDR PORT_STR strconcat IP_ADDR ' /nossh /T=1' connect IP_ADDR wait 'Password:' sendln PWD endif ;================================= ;telnet接続、ログ保存ディレクトリ ;================================= getdir DIR changedir DIR ;================================= ;ログ保存名の確定 ;================================= getdate DATE '%Y%m%d-%H%M%S.log' SHRUN = 'show_run_' SHLOG = 'show_log_' strconcat SHRUN DATE strconcat SHLOG DATE ;================================= ;show runのログを取得 ;================================= logopen SHRUN 0 0 wait '>' pause 3 sendln 'en' wait 'Password' pause 3 sendln PWD wait '#' pause 3 sendln 'terminal length 0' wait '#' pause 3 sendln 'show run' pause 5 sendln '' wait '#' logclose ;================================= ;show logのログを取得 ;================================= logopen SHLOG 0 0 sendln 'show log' pause 5 sendln '' wait '#' sendln 'exit' logclose pause 5 ;================================= ;ここでループ元に戻る ;================================= endwhile ;================================= ;FHを無効化する ;================================= fileclose FH end |
これで、SSHとtelnetの両方にアクセスできるマクロが出来上がりました。 かなり使い勝手が上がった気がしますね。]]>