マクロサンプル - 自動ログイン(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

これも、使い方は簡単。

  1. サンプルをテキストエディタで開く。
  2. Username の 'nike' 内を自分のログイン用アカウントに修正する。
  3. hostname の '192.168.1.3' 内をログインしたいサーバ名/IPアドレスに修正する。
  4. ttpmacro.exe に読み込ませる。
  5. TeraTerm が起動して、上記ユーザのパスワード入力画面が出てくるので、入力する。
  6. パスワードが正しければ、SSH でログイン完了。

サンプルの解説

マクロによる 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

これだけで、同じ動作をする。