初投稿なのでまずは自己紹介
普段は東京某所でネットワークエンジニアやってます。
大学は文系でネットワークエンジニアとしても新人なので全くの0からスタート。
日頃、CentOSのエラーメッセージやExcelなどと格闘してる。
意外と学生時代には自作PCを計3台組んだり、文系だけどプログラミングの授業を取ったり、全く知識がなかったかと言えばそうでもない。
しかし、ネットワーク系は人生でほとんど触れてこなかったので頑張ってる。
#自分語りはこの辺にして本題
###何でTera Termのマクロなんてやろうと思ったか?
理由としては、自己紹介にあったようにお世辞にもLinuxのことをよく知っていてコマンドなんて早くぱっぱと打てる訳でもない自分なので、何かしらやろうとするとグダグダと時間がかかってしまうわけです。
で、何回も「これさっきもやったコマンドだな。」とか「ログインする度に毎回やってるじゃねぇか!?めんどくさい!!」という状況がある事に気付きました。
そして、「そういえば、Tera Termでマクロ作ってログイン簡単にしてる先輩居たな。あれって更にコマンド実行とかもできるのかな?」というのが、始まりでした。(そして、思いのほか効率化するの楽しくてハマっていくのですがw)
###ログインだけ自動化してみる
参考:https://qiita.com/yasushi-jp/items/ec578da715f139542886
username = 'XXXX' ;ログインするサーバーのユーザー名
hostname = 'XXX.XXX.XXX.XXX' ; ログインするサーバーのホスト名またはIPアドレス
passwdfile = 'passwd.dat' ; パスワード暗号化ファイル
portnum = '22' ;port番号の指定
getpassword passwdfile username userpasswd ; パスワード暗号化ファイルからパスワード取得
msg = hostname ;まず文字列の変数msgに先に定義した文字列の変数hostnameを入れる
strconcat msg ':portnum /ssh /auth=password /user=' ;定義した文字列変数msgの後にさらに文字を付け足す
strconcat msg username ;更に先に定義した文字列の変数usernameを付け足す
strconcat msg ' /passwd=' ;またまた文字を付け足し
strconcat msg userpasswd ;更に先に取得したパスワードである文字列の変数userpasswdを付け足す
strconcat msg inputstr ;ここは要らない気がする??
connect msg ;ここまで作ってきたmsgの文字列を元に接続
loginだけ自動化するとこんな感じになる。
このログインをするマクロは初回だけパスワードを聞いてきて自動でパスワード暗号化ファイルも作ってくれる。
だいたいはコードの中のコメントで簡単に説明してるつもりだが、付け足して説明したい所を説明する。
###割と複雑なconnectコマンド
Tera Termコマンドリファレンスを見ればわかるのだが、connectコマンドの仕様がとても複雑、、、しかし、その代わり色々な接続の仕方が可能になっている。
このマクロではstrconcatコマンドを使って文字列を付け足していってるせいで少し分かりにくいが、
connect 'myserver /ssh /auth=password /user=username /passwd=password'
という書式で使うconnectコマンドを使っている。
###これだけで少しセキュリティ的に安全!!getpasswordコマンド
これもまたTera Termコマンドリファレンスを見ればわかるのだが、getpasswordコマンドはconectコマンドと打って変わって簡単な仕様になっている。
書式は一種類しかなく
getpassword <filename> <password name> <strvar>
という書式だ。
しかも、<filename>
の部分で指定した暗号化ファイルがなければ新しく暗号化ファイルを作ってくれて、更に指定されたパスワードがファイルの中になければ、パスワードダイアログボックスが現れ、入力されたパスワードは文字列変数 <strvar>
に保存される。
同時に、その新しいパスワードは暗号化されパスワード識別子 と共にファイルに書き込まれる。
というとても気の利いたコマンドである。
#次回予告
次の投稿はいつになるか分かりませんが、マクロの中でrootに昇格したりするマクロや忘れがちなlog取りを自動化するマクロを紹介&解説したいと思います。