【TeraTermMacro】複数のホストへ秘密鍵を使用したSSHの接続

以下のコードで可能です。

:ユーザーIDの指定
USERNAME = 'administrator'

:秘密鍵のフルパスを指定
KEYFILE = 'C:\Users\*******\Desktop\ws153a\WinShat.txt'

:root権限のパスワードを指定
ROOTPASSWORD = ''

:ログファイルの出力するフォルダパスを指定
LOG_PATH = 'C:\Users\*****\Desktop\ws153a'

:strdimで数字毎の値を設定
NUMBER = 3
strdim HOSTADDR NUMBER
	HOSTADDR[0] = '192.168.1.1'
	HOSTADDR[1] = '192.168.1.2'
	HOSTADDR[2] = '192.168.1.3'
strdim HOSTNAME NUMBER
	HOSTNAME[0] = 'adm001-WebAP-001'
	HOSTNAME[1] = 'adm001-WebAP-002'
	HOSTNAME[2] = 'adm001-WebAP-003'
getdate NOW_DATE '%Y%m%d'
getdate NOW_TIME '%H%M%S'

:コマンドを実行する際に、タイムアウトで実行を防止
timeout = 0

:SSHの接続をする際に必要なユーザー情報を「USERNM」へ格納して、値が未入力の場合はマクロが強制終了
inputbox 'UserID' '自身のユーザーIDを選択してください。' USERNAME
USERNM = inputstr
strlen USERNM
if result == 0 then
	messagebox 'UserName information is not input.' 'Input Error'
	end
endif

inputbox 'KeyPath' '秘密鍵のファイルのフルパスを入力してください。' KEYFILE
KEY = inputstr
strlen KEY
if result == 0 then
	messagebox 'KeyFile information is not input.' 'Input Error'
	end
endif

inputbox 'RootPassword' 'ROOT権限のパスワードを入力してください。' ROOTPASSWORD
ROOT = inputstr
strlen KEY
if result == 0 then
	messagebox 'RootPassword information is not input.' 'Input Error'
	end
endif

:前述の「strdim」で指定した変数の各数字を繰り返し処理で指定
for j 0 2
	:「HOSTADDR」の『j』の数字毎にSSHで接続
	COMMAND = HOSTADDR[j]
		strconcat COMMAND ':22 /ssh /2 /auth=publickey /user='
		strconcat COMMAND USERNM
		strconcat COMMAND ' /keyfile='
		strconcat COMMAND KEY
	connect COMMAND
	
	:前述の「connect」ができない場合、マクロを強制終了
	if result <> 2 then
		messagebox 'it could not be connected.' 'Connection Error'
		end
	endif
		
		:ログの設定
		FULLPATH = LOG_PATH
		getdate LOG_NAME '_&h_.log'
		strconcat FULLPATH HOSTNAME[j]
		strconcat FULLPATH '_'
		strconcat FULLPATH NOW_DATE
		strconcat FULLPATH '_'
		strconcat FULLPATH NOW_TIME
		strconcat FULLPATH '_'
		strconcat FULLPATH LOG_NAME
		LOG_FULLPATH = FULLPATH
		logopen LOG_FULLPATH 0 0

:SSHでログインした場合、自動でコマンドを実行するには、必ず最初に『wait '$'』が必要です。
wait '$'

:root権限に移行のコード
sendln 'sudo su -'
wait 'パスワード'
sendln ROOT
wait '#'

:自動化したコマンドの実行を、一時的に止めるコード
messagebox 'idコマンドを使用しますが大丈夫でしょうか?' 'Check!'
sendin 'id'
wait '#'
pause 1

:すべてのコマンドの実行が完了した場合、対象のホストのコンソールを閉じるコード
sendln 'exit'
wait '$'
sendln 'exit'

:繰り返し処理で変数が残存しないように、対象の変数の値をクリア
FULLPATH = ''
LOG_FULLPATH = ''

:設定したログを閉じる
logclose

:現在、SSHで接続しているホストの接続の非同期(同期を外す)
unlink

:for j 0 2』のコードから処理を「012」の順番で繰り返す。
next


この記事が気に入ったらサポートをしてみませんか?