Tera Termマクロの使い方

#1 Tera Termマクロとは?
対話的なやりとりを自動化するプログラムです。
Tera Termマクロは、ttlという拡張子を持ったファイルになります。
このファイルの中に、Tera Termのコマンドを記述することで、
ネットワーク経由でマシンにログインしたり、マシンの情報を取得する、
といったことが自動でできます。

#2 環境
Tera Termのバージョンは、4.99

VMware Workstation 14 Player上の仮想マシンを使いました。

```console:OS版数
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

[root@server ~]# uname -r
3.10.0-693.el7.x86_64
```


#3 マシンへの自動ログイン方法
Tera Termマクロをマウスでクリックするだけで、PCからマシンにログインすることができます。

##3.1 パスワード認証でログインする方法
パスワード認証でサーバにログインするマクロを以下に示します。

サーバのIPは、192.168.3.20です。sshv2でログインします。
その時のユーザID/パスワードは、root/xxxxxです。
そして、プロンプトとして`#`が表示されるまで待つ、という意味になります。
詳細は、[ここ(connect)](https://ttssh2.osdn.jp/manual/ja/macro/command/connect.html)を参照してください。

```cosole:マクロファイルの中身
connect '192.168.3.20:22 /ssh /2 /auth=password /user=root /passwd=xxxxx'
wait '#'
```

```console:マクロの実行結果
Last login: Sat Mar  9 16:46:31 2019 from 192.168.3.3
[root@server ~]#
```

##3.2 チャレンジ・レスポンス認証でログインする方法
チャレンジ・レスポンス認証でサーバにログインするマクロを以下に示します。

```cosole:マクロファイルの中身
connect '192.168.3.20:22 /ssh /2 /auth=challenge /user=root /passwd=xxxxx'
wait '#'
```


##3.3 クライアント認証でログインする方法
クライアント証明書を使って、サーバに自動ログインするマクロを以下に示します。
クライアントの秘密鍵は\pub_key\pub.ppkとして保存します。

```cosole:マクロファイルの中身
connect '192.168.3.20:22 /ssh /2 /auth=publickey /user=hoge /keyfile="C:\pub_key\pub.ppk"
wait '#'
```


#4 ファイルを作成する方法
viでファイルを作成する方法について説明します。
ここでは、test.txtという名前のファイルを作成します。そして、その内容を表示してみます。

なお、下記マクロ中のsendとsendlnの違いは、
sendは文字列だけ、sendlnは文字列に続けて改行文字を送信する、という点です。

```cosole:マクロファイルの中身
connect '192.168.3.20:22 /ssh /2 /auth=password /user=root /passwd=xxxxx'
wait '#'

;viでファイルを開く。ファイルを開いたら1秒待つ。
sendln 'vi test.txt'
pause 1

;viを入力モードにする。入力モードにしたら1秒待つ。
send 'i'
pause 1

;ファイルに文字列を書き込む。文字列を書き込んだら1秒待つ。
send 'Hello'
pause 1

;viを終了する。ESC=$1B :=$3A w=$77 q=$71 RET=$0D $0A
send $1B $3A $77 $71 $0D $0A
wait '#'

;ファイルの中身を表示する。ログインプロンプト#がでるまで待つ。
sendln 'cat test.txt'
wait '#'
```

```console:マクロの実行結果
[root@server ~]# vi test.txt
[root@server ~]# cat test.txt
Hello
[root@server ~]#
```

#5 manページをスクロールする方法
ipコマンドのmanページをスクロールしてみます。

manページ中の"ip route"という文字列が表示されるまで、
スペースキーにより、manページをスクロールしてみます。
![teraterm1.png](https://qiita-image-store.s3.amazonaws.com/0/146813/dfe7395e-1886-cccf-4e74-8177f67f44ef.png)
なお、マクロ中のwaitregexの詳細は、[ここ(waitregex)](https://ttssh2.osdn.jp/manual/ja/macro/command/waitregex.html)を参照してください。

```cosole:マクロファイルの中身
connect '192.168.3.20:22 /ssh /2 /auth=password /user=root /passwd=xxxxx'
wait '#'

; ipコマンドのmanページを表示する。
sendln 'man ip'
pause 1

; ip routeという文字列が表示されたら、スクロールを停止します。
; Manual pageという文字列は、manページの左下に表示される文字列です。
do
    waitregex 'ip route' 'Manual page'
    if result == 2 then ; 'Manual page'が表示されたときの処理
        send ' '        ; スペースを送信する
        pause 1         ; 1秒待つ
    endif
loop while result != 1  ; Manual page'が表示されたたループ処理を抜ける。

; 5秒間待ちます。
pause 5

; manの参照を終了する。
send 'q'
wait '#'
```

#6 ネットワーク上のマシンの情報を取得する方法
下記環境で、クライアントで実行したコマンドの実行結果をサーバで参照してみます。

```console:環境
PC                     server                 client
 |                       | .20                   | .50
------------------------------------------------------
                   192.168.3.0/24
```
PCでTera Termマクロを実行します。
Tera Termマクロを実行すると、serverにログインします。
そのあと、clientにログインして、hostnameコマンドを実行します。
そして、実行結果をserverに転送します。


マクロの内容は、以下のようになります。

```cosole:マクロファイルの中身
connect '192.168.3.20:22 /ssh /2 /auth=password /user=root /passwd=xxxxx'
wait '#'

; クライアントにsshログインする。
sendln 'ssh 192.168.3.50'
wait 'password'

; クライアントのパスワードを入力する。
sendln 'xxxxx'
wait '#'

; クライアントでhostnameコマンドを実行する。
sendln 'hostname >> client.txt'
wait '#'

; クライアントからサーバにファイルを送信する。
sendln 'scp client.txt root@192.168.3.20:/root'
wait 'password'

; サーバのパスワードを入力する。
sendln 'xxxxx'
wait '#'

; クライアントからログアウトする。
sendln 'exit'
wait '#'

; クライアントのホスト名を表示する。
sendln 'cat client.txt'
wait '#'
```

```console:マクロの実行結果
Last login: Sat Mar  9 18:40:02 2019 from 192.168.3.3
[root@server ~]# ssh 192.168.3.50
root@192.168.3.50's password:
Last login: Sat Mar  9 18:40:03 2019 from server
[root@client ~]# hostname >> client.txt
[root@client ~]# scp client.txt root@192.168.3.20:/root
root@192.168.3.20's password:
client.txt                                                                             100%    7     2.7KB/s   00:00
[root@client ~]# exit
ログアウト
Connection to 192.168.3.50 closed.
[root@server ~]# cat client.txt
client
[root@server ~]#
```

#Z 参考情報
[Tera Term Home Page](https://ttssh2.osdn.jp/index.html.ja)
[付録 A	ASCII コード表 (16 進表現)](https://ttssh2.osdn.jp/manual/ja/reference/keycode.txt)
[Tera Termマクロで「– More –」を確実に処理する方法](https://www.teraterm.jp/?p=166)