本記事で出来ること
TeraTermマクロを使用して機器へのログインを自動化することができます。
- 必要最低限の接続方法=>「TeraTermマクロでSSHログイン」
- ホスト名やユーザを選択できるようにする=>「TeraTermマクロでSSHログイン」以降の項目
を参照してください。
TeraTermマクロでSSHログイン
Login.ttl
;########################################################################################
;############################ TeraTermでログインする ##########################
;########################################################################################
IPADDR = 'xx.xx.xx.xx' ;接続先IPアドレス
USERNAME = 'ユーザ名'
USERPASS = 'ユーザパスワード'
portnum = '22' ;接続ポート
msg = IPADDR
strconcat msg ':portnum /ssh /auth=password /user='
strconcat msg USERNAME
strconcat msg ' /passwd='
strconcat msg USERPASS
strconcat msg inputstr
connect msg
; 接続判定(接続して10秒以内にプロンプトが表示されない場合もマクロ終了)
timeout = 10
wait '#' '$'
if result = 0 then
end
endif
dispstr #$1b"[8;35;150t" ;ウィンドウサイズを横:35 縦150にする
end ;終了
EC2へSSHログイン
以下部分を注意する
- USERPASSがない
- pemキーを指定する
- 「auth」を「publickey」に変更する
- ログインユーザーはデフォルトでは「ec2-user」
EC2_Login.ttl
IPADDR = 'xx.xx.xx.xx' ;接続先IPアドレス
portnum = '22' ;接続ポート
PEMKEY = 'C:\<path>\pemキー名.pem'
msg = IPADDR
strconcat msg ':portnum /ssh2 /auth=publickey /user=ec2-user'
strconcat msg ' /keyfile='
strconcat msg PEMKEY
connect msg
end ;終了
ホストを選択する
1. ホスト管理テキストを作成
host.txt
ホスト名,IPアドレス
(例)
Zabbix,192.168.1.1
Router,192.168.1.2
Swtich,10.1.1.1
2.ホストを選択できるようにする
Login.ttl
;########################################################################################
;######################## ログインホストを選択する ############################
;########################################################################################
;ホスト管理テキストのファイル指定
filename = './host.txt'
separator = ',' ;ホスト名とIPをファイルから区別するための基準に「,」を使用
;*****************ホスト名のリスト数を取得する***********************
;ファイルを開く
fileopen fh filename 0
;ファイルの行数=ホスト数取得
host_amount = 0
while 1
; 一行読み込み
filereadln fh line
if result=1 then
break
endif
host_amount = host_amount + 1
endwhile
; ファイルクローズ
fileclose fh
;*****************ホスト名とIPのリストを作成***********************
strdim hostname_list host_amount
strdim ip_list host_amount
;*****************ホスト名とIPリストの値取得***********************
;ファイルを開く
fileopen fh filename 0
;ホスト名とIPのリストをファイルから取得する
i = 0
while 1
; 一行読み込み
filereadln fh line
if result=1 then
break
endif
;カンマ「,」で分割する
strsplit line separator
;分割した結果をホスト名とIPアドレスのリストに格納する
hostname_list[i] = groupmatchstr1
ip_list[i] = groupmatchstr2
i = i + 1
endwhile
; ファイルクローズ
fileclose fh
;*****************ホスト名を選択する***********************
listbox '--------------ホストを選択してください--------------' 'ホスト選択' hostname_list
;listboxの選択をキャンセルした場合はマクロを終了する
if result=-1 then
exit
endif
IPADDR = ip_list[result] ; 接続先ホストのIPアドレス
IPADDRを直書きしていた部分を削除する
Login.ttl
;削除行
IPADDR = 'xx.xx.xx.xx' ;接続先IPアドレス
ユーザを選択
ユーザのパスワードを暗号化する。
暗号化するにあたってdatファイルを作成する。
datファイルから、ログイン時にユーザを選択できるようにする
ユーザのパスワードを暗号化する
1.ユーザパスワード暗号化用の新しいマクロを作成する
Make_Pass.ttl
; ユーザ名指定
msg = "ユーザ名を入力してください。"
title = 'パスワードファイル作成のユーザ名指定'
inputbox msg title
username = inputstr
;パスワードファイル指定
passwdfile = 'passwd.dat' ; パスワード暗号化ファイル
;パスワードファイル作成
getpassword passwdfile username userpasswd ; パスワード暗号化ファイルからパスワード取得
2.作成したMake_Pass.ttlを実行する
ユーザ名とパスワードを記載する
ユーザを選択できるようにする
Login.ttl
;########################################################################################
;####################### ユーザ名(USERNAME)を選択する ###############################
;########################################################################################
passwdfile = './passwd.dat' ; パスワード暗号化ファイル
separator = '='
;*****************ホスト名のリスト数を取得する***********************
;ファイルを開く
fileopen fh passwdfile 0
;ファイルの行数=ユーザ数取得
user_amount = -1 ;最初の一行は考えないため
while 1
; 一行読み込み
filereadln fh line
if result=1 then
break
endif
user_amount = user_amount + 1
endwhile
; ファイルクローズ
fileclose fh
;*****************ユーザ名のリストを作成***********************
strdim username_list user_amount
;*****************ホスト名とIPリストの値取得***********************
;ファイルを開く
fileopen fh passwdfile 0
;パスワード暗号化ファイルからユーザ名を取得する
i = -1
while 1
; 一行読み込み
filereadln fh line
if result=1 then
break
endif
if i<>-1 then
strsplit line separator
username_list[i] = groupmatchstr1
endif
i = i + 1
endwhile
; ファイルクローズ
fileclose fh
;*****************ユーザ名を選択する***********************
listbox '--------------ユーザを選択してください--------------' 'ユーザ選択' username_list
;listboxの選択をキャンセルした場合はマクロを終了する
if result=-1 then
exit
endif
USERNAME= username_list[result] ; 接続する際に使用するユーザ名
USERNAMEを直書きしていた部分を削除する
Login.ttl
;削除行
USERNAME = 'ユーザ名'
パスワードを直書きしていた部分を変更する
Login.ttl
;変更前
USERPASS = 'ユーザパスワード'
;変更後
getpassword passwdfile USERNAME USERPASS ; パスワード暗号化ファイルからパスワード取得
ログを保存する
1. フォルダを指定して保存
特定のフォルダに「yyyymmdd_hhmmss_IPアドレス.log」で保存する
Login.ttl
;*******************ログファイル名の設定 *******************************
LOGSPATH = 'C:\Users\test\logs\' ;ログ保存先指定
getdate LOG_NAME '%Y%m%d_%H%M%S_&h.log'
strconcat LOGSPATH LOG_NAME
;*******************END ログファイル名の設定*******************************
2. 日付「yyyymmdd」ファルダの中に保存
Login.ttlと同じ階層の「logs」フォルダ内の「yyyymmdd」ファルダの中に「yyyymmdd_hhmmss_IPアドレス.log」で保存する
階層イメージ
├ Login.tti
├ hostname.txt
├ logs/
└ yyyymmdd/
│ └ yyyymmdd_hhmmss_ホスト名(IPアドレス).log
│
└ 20220505/
└ 20220505_120030_192.168.1.1.log
logsフォルダは既に存在しているとします。
Login.ttl
;*******************ログファイル名の設定 *******************************
getdate DATE 'logs\%Y%m%d'
foldersearch DATE ;yyyymmddフォルダが存在するか判定
;yyyymmddフォルダが存在しなかったら作成する
if result = 0 then
foldercreate DATE
endif
LOGSPATH = 'C:\Users\test\' ;ログ保存先指定
strconcat LOGSPATH DATE
getdate LOG_NAME '\%Y%m%d_%H%M%S_&h.log'
strconcat LOGSPATH LOG_NAME
;*******************END ログファイル名の設定*******************************
【必須】ログを開始する設定を入れる
dispstr #$1b"[8;35;150t"の直後に記載する
dispstr #$1b"[8;35;150t"
; ログ取得開始
logopen LOGSPATH 1 1
ホストとユーザを選択・ログ保存版Login.ttl
Login.ttl
;=================================================
; Filename : Login.ttl
; Description : SSH Auto login
; Author : Name
; Created : yyyy/mm/dd
; modified :
;=================================================
;########################################################################################
;######################## ログインホストを選択する ############################
;########################################################################################
;ホスト管理テキストのファイル指定
filename = './host.txt'
separator = ',' ;ホスト名とIPをファイルから区別するための基準に「,」を使用
;*****************ホスト名のリスト数を取得する***********************
;ファイルを開く
fileopen fh filename 0
;ファイルの行数=ホスト数取得
host_amount = 0
while 1
; 一行読み込み
filereadln fh line
if result=1 then
break
endif
host_amount = host_amount + 1
endwhile
; ファイルクローズ
fileclose fh
;*****************ホスト名とIPのリストを作成***********************
strdim hostname_list host_amount
strdim ip_list host_amount
;*****************ホスト名とIPリストの値取得***********************
;ファイルを開く
fileopen fh filename 0
;ホスト名とIPのリストをファイルから取得する
i = 0
while 1
; 一行読み込み
filereadln fh line
if result=1 then
break
endif
;カンマ「,」で分割する
strsplit line separator
;分割した結果をホスト名とIPアドレスのリストに格納する
hostname_list[i] = groupmatchstr1
ip_list[i] = groupmatchstr2
i = i + 1
endwhile
; ファイルクローズ
fileclose fh
;*****************ホスト名を選択する***********************
listbox '--------------ホストを選択してください--------------' 'ホスト選択' hostname_list
;listboxの選択をキャンセルした場合はマクロを終了する
if result=-1 then
exit
endif
IPADDR = ip_list[result] ; 接続先ホストのIPアドレス
;########################################################################################
;####################### ユーザ名(USERNAME)を選択する ###############################
;########################################################################################
passwdfile = './passwd.dat' ; パスワード暗号化ファイル
separator = '='
;*****************ホスト名のリスト数を取得する***********************
;ファイルを開く
fileopen fh passwdfile 0
;ファイルの行数=ユーザ数取得
user_amount = -1 ;最初の一行は考えないため
while 1
; 一行読み込み
filereadln fh line
if result=1 then
break
endif
user_amount = user_amount + 1
endwhile
; ファイルクローズ
fileclose fh
;*****************ユーザ名のリストを作成***********************
strdim username_list user_amount
;*****************ホスト名とIPリストの値取得***********************
;ファイルを開く
fileopen fh passwdfile 0
;パスワード暗号化ファイルからユーザ名を取得する
i = -1
while 1
; 一行読み込み
filereadln fh line
if result=1 then
break
endif
if i<>-1 then
strsplit line separator
username_list[i] = groupmatchstr1
endif
i = i + 1
endwhile
; ファイルクローズ
fileclose fh
;*****************ユーザ名を選択する***********************
listbox '--------------ユーザを選択してください--------------' 'ユーザ選択' username_list
;listboxの選択をキャンセルした場合はマクロを終了する
if result=-1 then
exit
endif
USERNAME= username_list[result] ; 接続する際に使用するユーザ名
;########################################################################################
;############################ TeraTermでログインする ##########################
;########################################################################################
getpassword passwdfile USERNAME USERPASS ; パスワード暗号化ファイルからパスワード取得
portnum = '22' ;接続ポート
;*******************ログファイル名の設定 *******************************
getdate DATE 'logs\%Y%m%d'
foldersearch DATE ;yyyymmddフォルダが存在するか判定
;yyyymmddフォルダが存在しなかったら作成する
if result = 0 then
foldercreate DATE
endif
LOGSPATH = 'C:\Users\test\' ;ログ保存先指定
strconcat LOGSPATH DATE
getdate LOG_NAME '\%Y%m%d_%H%M%S_&h.log'
strconcat LOGSPATH LOG_NAME
;*******************END ログファイル名の設定*******************************
msg = IPADDR
strconcat msg ':portnum /ssh /auth=password /user='
strconcat msg USERNAME
strconcat msg ' /passwd='
strconcat msg USERPASS
strconcat msg inputstr
connect msg
; 接続判定(接続して10秒以内にプロンプトが表示されない場合もマクロ終了)
timeout = 10
wait '#' '$'
if result = 0 then
end
endif
dispstr #$1b"[8;35;150t" ;ウィンドウサイズを横:35 縦150にする
; ログ取得開始
logopen LOGSPATH 1 1
end ;終了
ログイン後
Login.ttl
wait '文字列が表示されるまで待機'
sendln '文字列を入力する'
(例)
wait '#' '$' ;複数設定可能 #または$が表示されるまで待機
sendln 'hostname'