Teratermマクロ初心者入門

# Teratermマクロって何？
私も最初知りませんでした。存在を。なので、最初作っておいてと言われた時に一から調べて作りました。
今回は私同様存在を知らない方を対象にある程度わかりやすく記事を書こうと思います。
この記事を読むだけである程度Teratermマクロ理解してある程度かけるようになっていると思います。多分。

# 前提条件
・VirtualBOXなどで仮想サーバを作成してあること。
　接続先のサーバが存在していればそれで良いです。
・Teratermがインストール済みであること。なければ下記から各自インストールしておいてください。
　[ここだよ！](https://ttssh2.osdn.jp/)

# Teratermマクロ
## 0.Teratermマクロを使用する準備
①ファイル形式は'.ttl'です。
メモ帳などエディタを開きマクロを書き終わったら●●.ttlで保存してください。
　

②.ttlファイルとTeratermの連携
.ttlファイルを作成しただけではマクロを使用できません。
使用する前に以下の作業を行います。
1.[.ttlファイルを右クリック] -> [プログラムから開く] -> [別のプログラムから開く]
2.[Teratermを保存したディレクトリ] -> [ttpmacro.exe]を選択
※特に変更等していなければ下記パスにインストールしているはずです。
'C:\Program Files (x86)\teraterm'
![sabao1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/9a9e8cb4-f8cc-0900-52b3-973d95d5513a.jpeg)
![sabao2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/1d5d7b19-85d4-a5fb-bb3b-a9701865d9ef.jpeg)
![sabao3](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510919/67174a46-6988-04b7-fc98-873d645aad94.jpeg)



①と②を行うことでTeratermマクロを使用することができます。

## 1.ログインするだけのマクロ(パスワード認証Ver.)
接続先機器の情報と接続オプションだけ記載して本当にログインするだけ。
もちろんログの自動出力設定等もしていません。
認証方法はパスワード認証とします。

```1.ログインするだけのマクロ(パスワード認証Ver.)
;=========================================================== 
; nonZy.ttl
; nonZy_DBへの接続
;=========================================================== 
; 接続情報
HOSTADDR = '192.168.38.38'
USERNAME = 'nonZy'
PASSWORD = 'nonZyPASS'


; 接続オプション
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD

; 接続
connect COMMAND

end'
```

*初回なので1つ1つ説明していきます。*
① **;**
コメントアウト。
分かりやすく言うと、';'←これより後の文字列はガン無視するよ！

② **●● = '××'**
●●に××を代入します。●●は何でもいいです。(先頭数字はダメとか制約あったかも？)
例えばHOSTADDRはnonZyでも問題ないわけです。
ただし、後から見た人がnonZy = ...だと"？？？"となるので分かりやすくするようにしてます。

③ **HOSTADDR = '192.168.38.38'**
HOSTADDRに接続先IPアドレスを代入します。今回は192.168.38.38。

④ **USERNAME = 'nonZy'**
USERNAMEにユーザ名を代入します。今回はnonZy。
接続先のユーザ名となります。

⑤ **PASSWORD = 'nonZyPASS'**
PASSWORDにユーザのPWを代入します。今回はnonZyPASS。

⑥ **COMMAND = HOSTADDR**
COMMANDにHOSTADDRを代入します。

**★ここから結構重要(かもしれない)**
 **strconcat COMMAND ':22 /ssh /2 /auth=password /user='**
⑦ **strconcat**
文字列を継ぎ足します。例)COMMANDに:22 /ssh...を継ぎ足す。後ろにくっつける。

⑧ **:22**
TCPポートの指定。今回は22番ポート使用します。

⑨ **/ssh /2**
接続方式。今回はSSH2で接続するよ！を意味しています。

⑩ **/auth=password**
認証方法になります。詳細以下に記載するので覚えてください。
主に使っているのはパスワード認証、公開鍵認証です。
取り敢えずこの2つを覚えておけば問題ないです。
■パスワード認証方式
/auth=password
■公開鍵認証方式
/auth=publickey

⑪ **/user=**
Teraterm「ユーザ名は？」と聞いてきてます。

⑫ **strconcat COMMAND USERNAME**
nonZy「"USERNAME(=nonZy)"です。」と答えてます。

⑬ strconcat COMMAND ' /passwd='
⑭ strconcat COMMAND PASSWORD
Teraterm「パスワードは？」と聞いてきてます。
nonZy「"PASSWORD(=nonZyPASS)"です。」と答えています。
**★ここまで結構重要でした。覚えてね。**

⑮ **connect COMMAND**
COMMANDの情報で接続(connect)します。

⑯ **end**
Teratermマクロ終了(end)です。

とりあえず、Teratermマクロの基本中の基本中の基本は以上となります。
strconcatと認証方法さえ覚えておけば問題ないです。
ここまで読み終わったら1度マクロをコピーしてIPアドレスなど必要情報を自分の情報へ
入れ替えて.ttlで保存してログインしてみてください。

## 2.ログインするだけのマクロ(公開鍵認証Ver.)
接続先機器の情報と接続オプションだけ記載してログインするだけ。
もちろんログの自動出力設定等もしていません。認証方法は公開鍵認証とします。
※鍵を事前に作成しておく必要があります。

```2.ログインするだけのマクロ(公開鍵認証Ver.)
;========================================================== 
; nonZy.ttl
; nonZy_DBへの接続
;========================================================== 
; Teratermマクロ配置ディレクトリを取得
getdir DIR

; 接続情報
HOSTADDR = '192.168.38.38'
USERNAME = 'nonZy'
PASSWORD = 'nonZyPASS'

; 鍵ファイルを指定
KEY = 'nonZy_KEY'
makepath KEYFILE DIR KEY

; 接続オプション
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=publickey /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD
strconcat COMMAND ' /keyfile='
strconcat COMMAND KEYFILE

; 接続
connect COMMAND

end
```

説明します。

① **getdir DIR**
getdir:Teratermマクロが配置されているディレクトリ情報を取得
今回はそれをDIRに格納しています。
例えばTeratermマクロを'D:\nonZy\nonZy.ttl'と配置していたとすると
DIRに格納されるパスは'D:\nonZy'になるよ！

② **KEY = 'nonZy_KEY'**
KEYに'nonZy_KEY'を代入するよ！
今回使う鍵はコイツになります。

③ **makepath KEYFILE DIR KEY**
makepathはその名の通りパスを作成します。
makepath A B CはB+CをAに代入するよ！という意味です！
今回はDIR+KEYをKEYFILEに代入しているよ！

④ **strconcat COMMAND ':22 /ssh /2 /auth=publickey /user='**
公開鍵認証を使用する宣言！！！

⑤ **strconcat COMMAND ' /keyfile='**
⑥ **strconcat COMMAND KEYFILE**
Teraterm「鍵は？」と聞いてきてます。
nonZy「"KEYFILE"です。」と答えています。

2.はこれで終了。
今回はディレクトリパス持ってきて、鍵指定して接続しています。

ただし、これだけでは仕事では何も役に立ちません。
サーバや機器で作業をした際にはその作業証跡(ログ)を残さないといけません。
ログインだけマクロを使ってログは毎回指定するのは手間だし、何よりマクロの意味がないので
次のマクロではログも指定したパスに出力されるようにしたいと思います。


## 3.ログイン+ログフォルダ作成+ログ自動作成+コマンド実行するマクロ
ログを格納するフォルダがなければ作成してその中にログを自動生成して尚且つdateなどのコマンドを実行する
マクロを今回は説明していきます。このマクロが入門編最後のマクロとなります。
1,2のマクロと比べると一気に難しくなってしまった気がしますが、丁寧に説明するつもりなので
頑張ってついてきてください。このマクロを理解することができれば、Teratermマクロ初心者卒業となります。

```3.ログイン+ログフォルダ作成+ログ自動作成+コマンド実行するマクロ
;========================================================== 
; nonZy.ttl
; nonZy_DBへの接続
;========================================================== 
; Teratermマクロ配置ディレクトリを取得
getdir DIR

; 接続情報
HOSTADDR = '192.168.38.38'
USERNAME = 'nonZy'
PASSWORD = 'nonZyPASS'
HOSTNAME = 'nonZyKINGDAM'

; ログディレクトリの指定
LOGSDIR = DIR
strconcat LOGSDIR '\nonZyLOGS\'

; ログディレクトリの作成
foldersearch LOGSDIR
if result = 0 then
foldercreate LOGSDIR
endif

; 接続オプション
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD

; 接続
connect COMMAND

; ログファイル情報作成
getdate LOGDATE '%Y%m%d_%H%M%S'
strconcat LOGNAME LOGSDIR
strconcat LOGNAME HOSTNAME
strconcat LOGNAME '_'
strconcat LOGNAME LOGDATE
strconcat LOGNAME '.log'

; ログファイル作成
logopen LOGNAME 0 0

; コマンド実行
wait '$'
sendln 'date; uname -n;'

end
```


① **LOGSDIR = DIR**
② **strconcat LOGSDIR '\nonZyLOGS\'**
LOGSDIRにDIRを代入し、LOGSDIRにnonZyLOGSを継ぎ足しています。
何故nonZyLOGの前に'\'を入れているかというと、getdirで取得されるパス最後に\が付かないためです。

③ **foldersearch LOGSDIR**
foldersearchはLOGSDIRというフォルダが存在するかを確認します。
存在すれば**1**、存在しなければ**0**を返します。

④ **if result = 0 then**
まずはfoldersearchの結果をresultへ格納し、
0の場合は⑤のコマンドを実行します。1の場合は何もしません。ガン無視します。
( もし結果が0の時は、～をします。)

⑤ **foldercreate LOGSDIR**
foldercreateはLOGSDIRというフォルダを作成します。

⑥ **endif**
if文終了のお知らせ。
**if**～で始めたら～**endif**で終わらせます。

⑦ getdate LOGDATE '%Y%m%d_%H%M%S'
⑧ strconcat LOGNAME LOGSDIR
⑨ strconcat LOGNAME HOSTNAME
⑩ strconcat LOGNAME '_'
⑪ strconcat LOGNAME LOGDATE
⑫ strconcat LOGNAME '.log'
getdateは日時を取得します。
今回はフォーマットを'%Y%m%d_%H%M%S'で指定し、LOGDATEへ代入しています。
その後はLOGNAMEへLOGSDIR、HOSTNAME、_、LOGDATE、.logを継ぎ足しています。
ここは出力されるログの名前を決めている場所なんですが、人によって好みが変わるので
好きに変えてみてください。今回だと'ホスト名_年月日_時分秒.log'で保存されます。

**; ログファイルを作成**
⑬ **logopen LOGNAME 0 0**
LOGOPENはログの記録を開始します。それを今回の場合であればLOGNAME(ログファイル名)へ保存します。
LOGNAME後ろの0 0は特に気にせず0 0で問題ないです。が、一応...
1つ目が0の時は特殊文字を表示しない、1の時はすべて出力する。
2つ目が0の時は既存ファイルに上書き保存、1の時は既存ファイルに追記する。

⑭ **wait '$'**
waitコマンドは文字列がホストから送られてくる(表示される)までマクロを停止します。
何の機器に、何で接続するかにもよりますが、今回はLinux系へrootユーザ以外で接続する想定であるため
文字列を上記にしています。大体プロンプト'$'ですよね。

⑮ **sendln 'date; uname -n;'**
sendlnは文字列(今回だと'date; uname -n;')を記入した後のENTERキーだと思ってください。
...
sendln :sendlnのみだと改行をします。
sendln A：Aをホストへ送信する
イメージとしては
[nonZy@DB]$ A　　　←入力後sendln(ENTERキー)実行
上手い説明が見つからないため、後で考え直して編集します。
今回だとwait、uname -nを実行しています。

# 最後に
初心者入門としているが自分の説明の下手さで伝わるか微妙ですね。
ただ、マクロ3を使用することで例えば現在のリソース状況、ログインユーザ情報...etcを
一々Teratermで接続先情報入力して～コマンド実行して～等をしなくて済むようになります。
ここでは書いていませんが、他にも使い方が沢山ありますので、そのうち記事を書こうかなと思います。
**誤字脱字、内容が間違っている等ありましたら教えてください。修正します。**