-
Notifications
You must be signed in to change notification settings - Fork 0
/
ServerConnect.ttl
502 lines (378 loc) · 8.15 KB
/
ServerConnect.ttl
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
;################################
;# メイン処理開始
;################################
;初期化関数呼び出し
call InitData
;タイムアウト設定
call SetTimeout
;バージョンチェック
call CheckVersion
;データ件数カウント
call DataCounter
;データ件数に応じた配列初期化
call InitArray
;ファイル読み込み関数呼び出し
call FileReader
;サーバリストを表示
call ShowServerList
;Cygwin接続を判定
strcompare CON_SERVER CON_CYG
if result=0 then
;Cygwin接続
call ConnectCygwin
else
;データファイルから選択したサーバのレコードを収集
call SearchData
;接続に必要なコマンドの形成
call MakeConnectCmd
;接続開始処理
call ConnectServer
endif
;文字コードチェック
call CodeCheck
;メイン処理終了
end
;################################
;# タイムアウト設定
;################################
:SetTimeout
timeout=TIMEOUT_SECOND
;関数終了
return
;################################
;# バージョンチェック
;################################
:CheckVersion
;動作するteratermのバージョンチェック
getver USER_VERSION NECESSARY_VERSION
if result=-1 then
;アラートメッセージの生成
strconcat MSG_VERSION_ERR '\n'
strconcat MSG_VERSION_ERR MSG_VERSION_ERR_ALLOW
strconcat MSG_VERSION_ERR NECESSARY_VERSION
strconcat MSG_VERSION_ERR '以上\n'
strconcat MSG_VERSION_ERR MSG_VERSION_ERR_DENY
strconcat MSG_VERSION_ERR USER_VERSION
;アラートメッセージの特殊文字の置換
strspecial MSG_VERSION_ERR
messagebox MSG_VERSION_ERR TITLE_VERSION_ERR
exit
endif
;関数終了
return
;################################
;# 文字コードチェック
;################################
:CodeCheck
;接続待ち
waitregex WAIT_CMD_1 WAIT_CMD_2
;文字コードチェック
sendln CMD_CHECK_CODE
;コマンド応答待ち
wait WAIT_CMD_SJIS WAIT_CMD_EUC WAIT_CMD_UTF
;文字コード設定
if result=1 then
;文字コード SJIS設定
callmenu CODE_SEND_SJIS
callmenu CODE_RECV_SJIS
elseif result=2 then
;文字コード EUC設定
callmenu CODE_SEND_EUC
callmenu CODE_RECV_EUC
elseif result=3 then
;文字コード UTF-8設定
callmenu CODE_SEND_UTF
callmenu CODE_RECV_UTF
endif
;関数終了
return
;################################
;# 変数初期化関数
;################################
:InitData
;メッセージ定義
MSG_CON_SERVER='接続するサーバを選択してください。'
MSG_CON_SERVER_ERR='接続がタイムアウトしました。'
MSG_VERSION_ERR='Teratermのバージョンを更新してください。'
MSG_VERSION_ERR_ALLOW='動作に必要なバージョン:\t'
MSG_VERSION_ERR_DENY='現状のバージョン:\t\t'
;タイトル定義
TITLE_CON_SERVER='接続先サーバ一覧'
TITLE_CON_SERVER_ERR='接続エラー'
TITLE_VERSION_ERR='動作環境チェック'
;********************************
; 接続先定義ファイル *
; CSV形式で以下の書式とする。 *
; データ1:メニュー選択時の名称*
; データ2:サーバホスト名orIP *
; データ3:ユーザ名 *
; データ4:パスワード *
; データ5:ポート番号 *
; データ6:キーファイル(省略可)*
; キーファイルのパスは*
; ttpmacro.exeからの *
; 相対パスを指定。 *
;********************************
CNF_FILE='datalist.txt'
;URL,ユーザレコード件数(初期値)
CNT_DATA=0
;デリミタ定義
DELMIT=','
;接続コマンド定義
CON_CMD=''
;接続先サーバ定義
CON_SERVER=''
;接続先IP定義
CON_IP=''
;接続先サーバユーザ定義
CON_NAME=''
;接続先サーバパスワード定義
CON_PASS=''
;接続先ポート定義
CON_PORT=''
;キーファイル定義
CON_KEY=''
;Cygwin接続定義
CON_CYG='Cygwin'
;認証方式定義
strdim AUTH_WORD 2
AUTH_WORD[0]='password'
AUTH_WORD[1]='publickey'
;待ち文字定義
WAIT_CMD_1='$'
WAIT_CMD_2='#'
WAIT_CMD_SJIS='ja_JP.SJIS'
WAIT_CMD_EUC='ja_JP.eucJP'
WAIT_CMD_UTF='ja_JP.UTF-8'
;キーボードマッピングファイル定義
KEY_MAP_FILE='IBMKEYB.CNF'
;ttpmacro.exeのディレクトリを定義
KEY_MAP='';
;動作に必要なバージョンの定義
NECESSARY_VERSION='4.72'
;動作環境のバージョンの定義
USER_VERSION=''
;文字コードチェックコマンド
CMD_CHECK_CODE='echo $LANG'
;文字コード 送信 SJIS
CODE_SEND_SJIS=54110
;文字コード 受信 SJIS
CODE_RECV_SJIS=54010
;文字コード 送信 EUC
CODE_SEND_EUC=54111
;文字コード 受信 EUC
CODE_RECV_EUC=54011
;文字コード 送信 UTF-8
CODE_SEND_UTF=54113
;文字コード 受信 UTF-8
CODE_RECV_UTF=54013
;タイムアウト秒数定義
TIMEOUT_SECOND=60
;関数終了
return
;################################
;# サーバ名称を格納する配列の初期化
;################################
:InitArray
;配列の初期化
strdim SERVER_DATA CNT_DATA
;関数終了
return
;################################
;# 接続先サーバをファイルから検索
;################################
:SearchData
;ファイルオープン
fileopen fhandle CNF_FILE 0
;ファイル全件表示
while 1
; 一行読み込み
filereadln fhandle line
if result=1 then
break
endif
; 読み込んだ行CSV形式で分割
strsplit line ','
;接続先サーバ(変数)とデータファイルを比較
strcompare CON_SERVER groupmatchstr1
if result==0 then
;接続先IP定義
CON_IP=groupmatchstr2
;ユーザ名
CON_NAME=groupmatchstr3
;パスワード
CON_PASS=groupmatchstr4
;接続ポート
CON_PORT=groupmatchstr5
;キーファイル
CON_KEY=groupmatchstr6
;処理終了
break
endif
endwhile
; ファイルクローズ
fileclose fhandle
;関数終了
return
;################################
;# 接続先サーバの表示
;################################
:ShowServerList
listbox MSG_CON_SERVER TITLE_CON_SERVER SERVER_DATA
;選択したデータの添字を保存
SELECT=result
;選択先判定
;キャンセル、もしくはバツ閉じを選択時、即時終了
if SELECT==-1 then
exit
else
;接続先サーバ名称を保存
CON_SERVER=SERVER_DATA[SELECT]
endif
;関数終了
return
;################################
;# データファイルの件数をカウント
;################################
:DataCounter
;ファイルオープン
fileopen fhandle CNF_FILE 0
;ファイル全件表示
while 1
; 一行読み込み
filereadln fhandle line
if result=1 then
break
endif
;データ件数を加算
CNT_DATA=CNT_DATA + 1
endwhile
; ファイルクローズ
fileclose fhandle
;関数終了
return
;################################
;# サーバ名称を配列に確保
;################################
:FileReader
;URL,ユーザ定義を格納する配列へ格納するための添字
CNT_WORK=0
;ファイルオープン
fileopen fhandle CNF_FILE 0
;ファイル全件表示
for CNT_WORK 0 CNT_DATA
; 一行読み込み
filereadln fhandle line
if result=1 then
break
endif
; 読み込んだ行CSV形式で分割
strsplit line ','
;配列にサーバ名称を格納
SERVER_DATA[CNT_WORK] = groupmatchstr1
next
; ファイルクローズ
fileclose fhandle
;関数終了
return
;################################
;# コマンド形成
;################################
:MakeConnectCmd
;接続コマンドの形成
;IPを付与
strconcat CON_CMD CON_IP
;ポートを付与
strconcat CON_CMD ':'
strconcat CON_CMD CON_PORT
;接続コマンド生成(定型文)
strconcat CON_CMD ' /ssh /auth='
;認証方式分岐
strcompare CON_KEY ''
if result=0 then
;password認証
strconcat CON_CMD AUTH_WORD[0]
else
;keyファイル認証
strconcat CON_CMD AUTH_WORD[1]
endif
;接続コマンド生成(定型文)
strconcat CON_CMD ' /user='
;接続ユーザを付与
strconcat CON_CMD CON_NAME
;接続コマンド生成(定型文)
strconcat CON_CMD ' /passwd='
;接続パスワードを付与
strconcat CON_CMD CON_PASS
;認証方式分岐(キー利用)
strcompare CON_KEY ''
if result<>0 then
;接続コマンド生成(定型文)
strconcat CON_CMD ' /keyfile='
strconcat CON_CMD CON_KEY
endif
;関数終了
return
;################################
;# 共通後処理
;################################
:CommonSetting
;設定ファイル読み込み
restoresetup 'teraterm.ini'
;ウインドウのタイトルを接続先の名称に変更
settitle CON_SERVER
;キーマップの設定
call KeyBoardMapping
;関数終了
return
;################################
;# キーボードファイル読み込み
;################################
:KeyBoardMapping
;キーマップファイルのフルパス定義
getttdir KEY_MAP
strconcat KEY_MAP '\'
strconcat KEY_MAP KEY_MAP_FILE
;キーボードファイルの存在チェック
filesearch KEY_MAP
if result=1 then
;ファイル読み込み
loadkeymap KEY_MAP_FILE
endif
;関数終了
return;
;################################
;# タイムアウト処理
;################################
:TimeOutConnection
;タイムアウト判定
if result<>2 then
;接続失敗を通知するダイアログを表示
messagebox MSG_CON_SERVER_ERR TITLE_CON_SERVER_ERR
;マクロ終了
exit
endif
;関数終了
return
;################################
;# サーバ接続処理
;################################
:ConnectServer
;サーバへ接続
connect CON_CMD
;タイムアウト判定処理
call TimeOutConnection
;共通事後処理
call CommonSetting
;関数終了
return
;################################
;# Cygwin接続処理
;################################
:ConnectCygwin
;Cygwin接続
cygconnect
;タイムアウト判定処理
call TimeOutConnection
;関数終了
return