0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TeraTermマクロの接続方法まとめ

Last updated at Posted at 2022-06-18

本記事で出来ること

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'
0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?