マクロサンプル - 自動ログイン(SSH版)
ずいぶん前に、Telnet を使ったログイン用マクロのサンプルを紹介した。
マクロサンプル - 自動ログイン(telnet版) - つれづれなるままに
今回は、同じく SSH での自動ログインマクロを利用して紹介。
作者 Yutaka Hirata さんに感謝。
マクロサンプル
; sample macro of Tera Term ; ; File: ssh2login.ttl ; Description: auto login with SSH2 protocol ; Environment: generic ; Update: 2004/12/4 ; Author: Yutaka Hirata username = 'nike' hostname = '192.168.1.3' ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; msg = 'Enter password for user ' strconcat msg username passwordbox msg 'Get password' msg = hostname strconcat msg ':22 /ssh /auth=password /user=' strconcat msg username strconcat msg ' /passwd=' strconcat msg inputstr connect msg
これも、使い方は簡単。
サンプルの解説
マクロによる TeraTerm の挙動は、下に書くような感じ。
上から Author の列までは、このサンプルを誰がどんな目的で作ったか紹介するコメント行。
記号 ";" の右側は、改行まですべてコメントとして無視される。
username は、どんなユーザIDでログインするのか、ユーザIDを入れる変数。
hostname も、どのサーバなのかを示す変数。
基本中の基本となる、変数へ代入する方法が分かる。
それから、コメント用記号を大量に連ねることで、実際に動かすプログラムになることを暗示。
まず、変数 msg に 'Enter password for user ' を代入。
strconcat コマンドで、変数 msg に、変数 username の中身を継ぎ足す。
この時点で、変数 msg の中身は 'Enter password for user nike' になっている。
passwordbox msg 'Get password'
これ、最初は難解だよね。
passwordbox は、パスワードを入れるためのダイアログボックスを開く。
引数として、まず表示するメッセージ内容、次にダイアログボックスのタイトルを指定。
ここまで実行されると、こんな感じでダイアログボックスが表示される。
じゃあ、ここで入力したパスワードはどうなる?
答えは簡単。あらかじめ型が定義された変数 inputstr に入ってる。
hoge とか入れて、messagebox で inputstr をみると、hoge が確認できちゃう…
次に、変数 msg には、connect コマンドへ渡す文字列を生成してる。
イメージ的には、ガチャコンガチャコンと組みたてられてる感じ。
5行まとめて、最終的にこんな文字列になるはず。
'192.168.1.3:22 /ssh /auth=password /user=nike /passwd=hoge'
これをそのまま使うので、最終的に
connect '192.168.1.3:22 /ssh /auth=password /user=nike /passwd=hoge'
というコマンドを実行することになる。
どこにもパスワードを保存してないので、SSH サンプルでは毎回パスワードを入力する必要がある。
ついでに書くと、この connect というコマンド、以前 telnet ログインのサンプルで書いたように Telnet 通信も指定できる。
connect '192.168.1.3:23 /nossh /T=1'
ということは、telnet 用サンプルを SSH 用サンプルに組み合わせれば、passwordbox の代わりに getpassword コマンドを使い、パスワードを暗号化して保存しておけるということ。
というわけで、さっそくやってみる。
; sample macro of Tera Term ; ; File: ssh2login.ttl ; Description: auto login with SSH2 protocol ; Environment: generic ; Update: 2004/12/4 ; Author: Yutaka Hirata ; Update: KuroNeko666 - 2012/12/30 username = 'nike' hostname = '192.168.1.3' ; get password from file getpassword 'password.dat' 'mypassword' Password ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; msg = hostname strconcat msg ':22 /ssh /auth=password /user=' strconcat msg username strconcat msg ' /passwd=' strconcat msg Password connect msg
うん、あっさり出来たw
SSH 通信だけど、最初の一回だけパスワード入力が必要で、一度入れたら即時ログインできる。
※ ちなみに、このやり方自体は平田さんのブログで紹介されてた気がする…。どこで見たかはうろ覚え。
〜〜 2015.3.30 追記 〜〜
バージョン4.62 以降なら、もっと楽になる。
username = 'nike' hostname = '192.168.1.3' getpassword 'password.dat' 'mypassword' Password sprintf2 msg '%s:22 /ssh /auth=password /user=%s /passwd=%s' hostname username Password connect msg
これだけで、同じ動作をする。