teratermマクロを使った多機能ssh自動ログインできるマクロを作ってみた

ssh接続先のサーバーが多々あると、接続情報を確認してサーバーへ接続するのが大変です。。。
今回は、Windowsにて、teratermマクロを使って、自動的にsshでログインするマクロを紹介したいと思います。
今回紹介するマクロは、特徴として以下が挙げられます。
- サーバー情報はファイル名に記載。 →わかりやすい&編集しやすい!
- 多段ssh対応。(現状2段まで対応可。)
- コンソールに表示された結果をログに残すことが可能。
- ログイン後、好きな定型コマンドを実行可。
例1: サーバーのOS情報や、CPU、メモリ、ディスク容量などをログイン時に表示
例2: 好きなaliasの設定等も可能。(わざわざ1サーバーごとに、~/.bashrcとか設定しなくても共通で設定可能。)
例3: 好きなシェルでログイン可能。(わざわざサーバー個別でシェルを設定しなくてもOK。)
▼構成
teratermマクロを入れるフォルダ/ファイル構成です。
SSH(フォルダ名。なんでも良い。)
├サーバー情報を書いたファイル名1.ttl
├サーバー情報を書いたファイル名2.ttl
・・・
├サーバー情報を書いたファイル名n.ttl
├zzz_template_00start.inc (共通マクロ本体。名前は何でも良いが、ファイル名順にしたときに一番下にくるように、ファイル名の最初に「zzz」を付けているだけ。)
├logs (ログが格納されるフォルダ。最初に手動で作成してください。)
└Data (SSHの秘密鍵(.keyファイル)や、暗号化されたパスワード(.datファイル)を格納するフォルダ。)
上記構成に従い、logsフォルダと、Dataフォルダを手動で作成してください。
▼準備
●共通マクロ本体
共通マクロ本体のソースを以下のようにテキストで作成します。
再度スクリプト見てみると、、、いろいろ穴がありますが。。。一応簡単にコメントしておきます。
216行目
logopen LOGFULLPATH 0 1 0 1 1
ログの書き込みの仕方を指定できますので、タイムスタンプあり/なし、バイナリ/テキスト、などご自身で好きな設定にしてください。
252行目
sendln "ssh -i ./.ssh/id_rsa " USERNAME "@" HOSTADDR2 "; exit"
多段SSHする際の秘密鍵ファイル名を固定値にしてます。必要に応じて、各々の環境に合わせて修正してください。あと、ここでパスフレーズが必要な場合は、その処理も追記する必要がありますね。。。
323行目
;; Linux自動判定
OSchoice='U'
sendln "uname -a"
wait "Linux" "FreeBSD" "Solaris" "SunOS"
;messagebox result "wait"
if result < 2 Then
OSchoice='L'
endif
if result >= 3 Then
; Solaris
OSchoice='S'
endif
OSの自動判定をしてますが、必要に応じてここも追記してあげてください。
337行目
;; bash 切替
SHell=0 ; 0:bash, 1:zsh, 2:other
sendln "echo $SHELL"
timeout = 5
wait "/bin/bash" "/bin/zsh" "/bin/tcsh" "/bin/csh" "/bin/sh"
If result = 2 Then
SHell=1
elseif result >= 3 Then
SHell=2
elseif result = 0 Then
SHell=0
endif
; bash try
If SHell >= 1 Then
timeout = 5
sendln "which bash"
wait "not found" "/bin/bash"
If result = 2 Then
sendln "bash && exit"
SHell=0
endif
endif
; zsh try
If SHell >= 2 Then
timeout = 5
sendln "which zsh"
wait "not found" "/bin/zsh"
If result = 2 Then
sendln "zsh;exit"
SHell=1
endif
endif
ここではデフォルトbash、第二候補にzshを指定するようにしてますが、ここもお好みに合わせて設定してみてください。
374行目
;; 共通マクロをインクルード
sendln "export PATH=./:$PATH:/sbin:~/bin"
;;sendln 'alias iconvs="iconv -f SJIS -t UTF-8 "; alias iconve="iconv -f EUC-JP -t UTF-8 "'
strcompare OSchoice 'L'
if result = 0 Then
;; Linux
sendln "export LANG=ja_JP.UTF-8;\"
・・・(略)・・・
sendln "sysctl -a 2>/dev/null|egrep '(hw.model|hw.ncpu|physmem)' ;df -hT;\"
endif
ここから415行目まで、自分で好きなコマンドを実行させてます。(サーバー情報取得だったり、alias設定だったり。)ここもお好みに合わせて設定してみてください。
●秘密鍵
秘密鍵が必要な場合は、Dataフォルダの直下に、秘密鍵を置きます。
拡張子は.keyで、ここではデフォルトで、id_rsa.keyという名前を使うように設定されてます。
サーバーごとにこの鍵の名前を変更可能です。
●サーバー情報を書いたファイル
サーバー情報を書いたファイル名n.ttl の中身は以下です。
;; マクロ実行ディレクトリ
getdir CURRENTDIR
;; SSH-AutoLoginマクロをインクルード
sprintf2 INCFILE '%s\zzz_template_00start.inc' CURRENTDIR
include INCFILE
;; マクロ終了
end
たったこれだけです。
これをテキストで作成するだけです。
あとは、ファイル名を命名規則に従って、設定するだけです。
<サーバー情報を書いたファイルの命名規則>
名前_RIP(,Port)_sudoYN(.PassDAT)_KeyNY(.KeyFile)_rootYN(.USER.USER2)(_hub-IP_KeyNY_USER).ttl
※括弧()は、省略可能です。
※基本、区切り文字はアンダーバー「_」です。
<解説>
名前 : ここはアンダーバー以外なら何書いても良いです。わかりやすい日本語名とか書くと良いでしょう。
RIP : 接続先サーバーの、リアルIPアドレス、または名前解決できるホスト名(FQDN名)など。
Port : sshポートです。デフォルトは22で省略可能。
sudoYN : rootになるときに、sudoを使う(sudoY)か、「su -」を使う(sudoN)か、を指定します。rootにならない場合は、何を設定しても影響ありません。
PassDAT : パスワードを格納する.datファイル名を拡張子なしで指定します。省略した場合、デフォルトはpass1が指定されています。
KeyNY : 秘密鍵が使ったsshログイン(KeyY)か、パスワードを使ったログイン(KeyN)かを指定します。
USER : サーバーにsshログインするユーザー名を指定します。省略時はデフォルトでec2-userになってます。rootで直接sshする場合は、ここをrootに設定する必要があります。
USER2 : ログインしたユーザーと違うユーザーにスイッチしたい場合は、ここにユーザーを指定します。
hub-IP : 多段sshする場合の踏み台となるサーバーのIPアドレス、またはホスト名を指定します。
KeyNY : 多段sshする場合の踏み台となるサーバーで、秘密鍵が使ったsshログイン(KeyY)か、パスワードを使ったログイン(KeyN)かを指定します。
USER : 多段sshする場合の踏み台となるサーバーのユーザー名を指定します。
<例>
ファイル名の例1:
AWS-REMOTEserver01(踏み台サーバー)_1.2.3.4_sudoY_KeyY.remote-server01_rootN.ttl
→サーバー1.2.3.4に、(デフォルト:ec2-userで)remote-server01.keyの秘密鍵を使ってsshログインします。
ファイル名の例2:
AWS-Webserver22(Webサーバー)_10.0.0.100_sudoY_KeyY.remote-server01_rootY.test_1.2.3.4_KeyY_ec2-user.ttl
→サーバー1.2.3.4に、ec2-userでremote-server01.keyの秘密鍵を使ってsshログインし、さらに、10.0.0.100のサーバーへtestユーザーでsshログインし、rootへスイッチします。
●拡張子.ttlをteratermマクロに関連付け
拡張子.ttlファイルが関連付けされていない場合は、サーバー情報を書いた.ttlファイルをクリックすると関連付けする画面が表示されるので、teratermフォルダ内のttpmacro.exe実行ファイルを指定して関連付けしましょう。
▼自動ログイン、トライ!!
ここまで準備ができれば、.ttlファイルをダブルクリックすると、、、自動でsshログインされるハズです!
あとは、「サーバー情報を書いたファイル名.ttl」をたくさん作って、アクセスしたいサーバーをクリックするだけで、簡単にsshできるようになります!!!
▼最後に
最初、この会社に入社した際、あまりのサーバーの多さに驚き、利便性と手間・効率化を考えて、最初にこのマクロを(ミニマムで)作ってしまいました。
結構突貫で作ってるところも多々あるので、作りも荒く、また、各所、応答結果によって分岐させたりしている箇所がありますが、環境によってはwaitやmpause等の微調整が必要かもしれませんので、各々の環境に合わせて修正してみてください。
ちなみに、ログは溜まっていくいっぽうなので、必要に応じて手動で削除してあげてください。
また、今回のマクロは、teraterm-4.87のバージョンで作成・テストしてます。バージョンによっては動作しない場合もありますので、ご了承ください。