1. 概要
サーバやネットワーク機器で作業を実施する際、手元の環境からSSH接続を行うことがあると思います。SSH接続を行うためには、接続先となるホスト名またはIPアドレス、ユーザ名とパスワードを用意します。
機器にSSH接続するために使用するターミナルソフトは様々ですが、今回は「TeraTerm(テラターム)1」を使用します。TeraTermではマクロと呼ばれる操作を自動で実行することができる機能も含まれています。
紹介するのは、TeraTermから手動で機器にSSH接続するのではなく、自動でSSH接続するだけではなく、ログ取得も行うマクロを紹介します。
2-1. ユーザ名でログインするマクロ
ユーザ名を入力することで、自動ログインするマクロを以下に記載します。初回ログイン時のみパスワードを入力することで、次回以降のログインの際はユーザ名を入力するだけでログインすることができます。ホスト名やIPアドレス、ポート番号などは手元の環境に合わせて置き換えます。
「getpassword2」コマンドは、パスワードを読み出すことができます。初回ログイン時にパスワードを要求されるのは、指定されたファイルにパスワードが登録されておらず、パスワードを読み出すことができないためです。パスワードが登録されている次回以降のログインでは、入力されたユーザ名をもとに、パスワードを読み出すことでログインすることができます。入力するパスワードを間違えた場合は、パスワードを登録したファイルから間違えて登録した部分の行を削除します。
[multi-secpass.ttl]
hostname = 'Router' ipaddr = '192.168.10.1' portnum = '22' sshpasswd = 'multi-passwd.dat' enablepasswd = 'multi-passwd.dat' loginhostname = hostname strconcat loginhostname ":ログインユーザ名を入力してください。" inputbox loginhostname "ユーザ名入力" username = inputstr ; 入力チェック(空白は終了) strlen username if result = 0 then messagebox 'username is not input.' 'Input Error' end endif ; ユーザ名からパスワードを検索 getpassword sshpasswd username userpasswd ; ログファイルのパラメータ loghostname = hostname strconcat loghostname ":ログファイル名を入力してください。" inputbox loghostname "ログファイル入力" logname = inputstr ; 入力チェック(空白は終了) strlen logname if result = 0 then messagebox 'logfile name is not input.' 'Input Error' end endif ; ログファイル格納ディレクトリのパラメータ Getdir dir Strconcat dir '\Log\' ; 対象フォルダが存在しない場合は作成 filesearch dir if result=0 then foldercreate 'Log' endif ; ログファイル名 Strconcat dir logname Strconcat dir '.log' ; SSH接続 sprintf2 msg '%s:%s /ssh /auth=password /user=%s /passwd=%s' ipaddr portnum username userpasswd Connect msg ; ログ取得開始 logopen dir 0 1 ; [Cisco]特権モードへ移行 Wait '>' Sendln 'enable' Wait 'assword:' getpassword enablepasswd 'enablepassword' enbpasswd Sendln enbpasswd Wait '#' Sendln 'terminal length 0'
以下のファイルは、「getpassword」コマンドで登録されたパスワードが記載されています。登録されたパスワードはランダムな文字列で記載されています。例として、ユーザ名「test1」と特権モードへ移動するためのパスワードがそれぞれホモづいています。
[multi-passwd.dat]
[Password] test1=/1og#s_S{E**********?zws9. enablepassword=^G|pjAK5]g>1************/`E!atRn0&IBf}e(r
2-2. ホスト名+ユーザ名でログインするマクロ
ホスト名とユーザ名を入力することで、自動ログインするマクロを以下に記載します。初回ログイン時のみパスワードを入力することで、次回以降のログインの際はユーザ名を入力するだけでログインすることができます。ホスト名やIPアドレス、ポート番号などは手元の環境に合わせて置き換えます。
ユーザ名を入力して自動ログインするマクロでは、ホスト毎にログインマクロを作成する必要がありましたが、ホスト名を指定することでログインマクロを一つにまとめることができるメリットがあります。デメリットは、ログイン可能なホストがファイル毎で分割されていないため、csvファイルで確認する必要がある点です。
csvファイルからホスト名を「filestrseek3」で検索し、ヒットした文字列から行の最後まで読み込みます。csvファイルにパラメータを記載する際は、行の初めはホスト名から記載することが必要です。
csvfile = 'sample.csv' separator = ',' sshpasswd = 'multi-id-passwd.dat' enablepasswd = 'multi-id-passwd.dat' ; ログイン機器ホスト名を入力 inputbox "ログイン機器ホスト名を入力してください。" "Input network device name" hostname = inputstr ; 入力チェック(空白は終了) strlen hostname if result = 0 then messagebox 'hostname is not input.' 'Input Error' end endif ; ログインユーザ名を入力 loginhostname = hostname strconcat loginhostname ":ログインユーザ名を入力してください。" inputbox loginhostname "Input username" username = inputstr ; 入力チェック(空白は終了) strlen username if result = 0 then messagebox 'username is not input.' 'Input Error' end endif ; ユーザ名からパスワードを検索 getpassword sshpasswd username userpasswd ; ログ取得 loghostname = hostname strconcat loghostname ":ログファイル名を入力してください。(拡張子は不要)" inputbox loghostname "ログファイル入力" logname = inputstr ; 入力チェック(空白は終了) strlen logname if result = 0 then messagebox 'logfile name is not input.' 'Input Error' end endif ; ログファイル格納ディレクトリのパラメータ Getdir dir Strconcat dir '\Log\' ; 対象フォルダが存在しない場合は作成 filesearch dir if result=0 then foldercreate 'Log' endif ; ログファイル名 Strconcat dir logname Strconcat dir '.log' ; 読み取り専用でCSVファイルを開く fileopen fhandle csvfile 0 0 ; CSVファイルから文字列を検索(見つかった場合はシステム変数 result に 1、見つからなかった場合はシステム変数 result に 0 が格納される) filestrseek fhandle hostname ; 見つからなかった場合は、「not_founud」ラベルに移動 if result=0 end ; 見つかった検索文字からその行の終わりまでを読み込む filereadln fhandle str ; CSVファイルから文字列を検索したパラメータ strsplit str separator host = groupmatchstr1 ipaddr = groupmatchstr2 portnum = groupmatchstr3 ; SSH接続 sprintf2 conbuf '%s:%s /ssh /auth=password /user=%s /passwd=%s' ipaddr portnum username userpasswd connect conbuf ; ログ取得開始 logopen dir 0 1 ; [Cisco]特権モードへ移行 Wait '>' Sendln 'enable' Wait 'assword:' getpassword enablepasswd 'enablepassword' enbpasswd Sendln enbpasswd Wait '#' Sendln 'terminal length 0' ; 読み取り専用のCSVファイルを閉じる fileclose fhandle end
以下のファイルは、ログイン対象のホスト名、IPアドレス、ポート番号を記載しています。対象ホストを追加する場合は、下にパラメータを記載していくことで可能です。
[sample.csv]
Router,192.168.10.1,22 Switch,192.168.20.1,22
以下のファイルは、「getpassword」コマンドで登録されたパスワードが記載されています。登録されたパスワードはランダムな文字列で記載されています。例として、ユーザ名「test1」と特権モードへ移動するためのパスワードがそれぞれホモづいています。
[multi-id-passwd.dat]
[Password] test1=/1og#s_?zS**********E!}6%Ea enablepassword=^G|p~c"/`E!************M>1ICn0&IBf}e(r