マクロサンプル - 自動ログイン(telnet版)

パスワードが平文で流れるので ssh を使え…と、言われているにもかかわらず、いまだに根強い利用者数を誇るよね。
いい加減、ローカル環境であっても telnet 使うの、やめようよ…。


と、個人的な愚痴はそこまでにして、TeraTerm マクロを使った telnet での自動ログイン。

マクロサンプル

これ、すごい使いやすいサンプルがソフトに同梱されてるんだよね。
デフォルトでインストールすると、ここにファイルがあるはず。


C:\Program Files\teraterm\login.ttl


以下、ファイルの内容を記載。

; Sample macro for Tera Term
;  Telnet login

; open Tera Term
;   command line = 'TERATERM myhost.mydomain' (telnet)
connect 'myhost.mydomain'

; set username
UsernamePrompt = 'Username:'
Username = 'MYNAME'
PasswordPrompt = 'Password:'
; get password from file
getpassword 'password.dat' 'mypassword' Password

; login
wait   UsernamePrompt
sendln Username

wait   PasswordPrompt
sendln Password

; OK, auto login complete.

使い方は簡単。

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


有用なサンプルを、ありがとうございます。


マクロを読み込んで実際に実行するのは TeraTerm なので、TeraTerm がどんなことをすればいいのか…という視点が必要かな。

サンプルの解説

ほんと、単純なログインだけだったらこれ以上ないサンプルなので、解説でも。
まずは connect 'myhost.mydomain' の部分から。


connect 'myhost.mydomain'
connect は、文字通りサーバへ接続するためのコマンド。
引数に、接続したいサーバ名を記述すると、そのサーバにアクセスしようとする。
ポート番号を telnet (23) から変えたい場合は、スペースで区切って、サーバ名 ポート番号 のように入力する。
これは「新しい接続」画面で入力する内容と同じ。


; set username
これは、TeraTerm の変数に、アカウントを入れるよーっていうコメント。


UsernamePrompt = 'Username:'
ログイン時にアカウントを求められる文字列を指定してる。
OS の仕様で、ログインプロンプトが変更されている場合は、要修正。


Username = 'MYNAME'
ユーザがログインするために使うアカウント(ID)を入れてる。


PasswordPrompt = 'Password:'
ログインプロンプトにアカウントを入れた後に求められるパスワード。
その入力を促す文字列を指定してる。
これも必要に応じて修正する。


; get password from file
getpassword 'password.dat' 'mypassword' Password
この getpassword というコマンドは覚えておくと便利。
まず一つ目で、パスワード用ファイルを指定する。
あれば読み込むし、なければ作る。
ファイル自体は、特に変更がなければ ttpmacro.exe のあるフォルダからの、相対パスになる。
setdir で、基本となるフォルダを変えられたはず…(changedir だったらごめんなさい)
2つ目で、読み込むパスワードの名前を指定する。
ひとつのファイルにたくさんパスワードを保存できる仕様なので、どのパスワードを使うのか指定するためのもの。
たとえば、ウェブサーバにログインするのは 'passwordA' で、ファイルサーバにログインするのは 'passwordB' のような感じ。
ファイルがなかったら当然パスワード名もパスワードもないので、ダイアログボックスで入力を促される。
無事に読み込めても、そのままではパスワードが暗号化されている。
これは単なるテキストファイルなので必要な措置。
そこで、3つ目の変数に、解読した内容が入る。


; login
wait UsernamePrompt
wait は、引数にある 'Username:' という文字が TeraTerm の画面に出るまで、ずーっと待ってろ…という命令。
時間制限もあるけど、正しく通信できるならスグに出るはず。


sendln Username
サンプルで言うと 'MYNAME' という文字列を、改行(自動的な Enter)もつけて送れ…という命令。
上のと合わせると「アカウント入力用文字列が来たら、アカウントを入れなさい」となる。


wait PasswordPrompt
sendln Password
ふたつ合わせて「パスワード入力用文字列が来たら、パスワードを入れなさい」となる。


; OK, auto login complete.
これは、単なるコメント。


コマンドを見ていくと、「ログインに必要な情報を集めて、対象サーバにアクセスする」ための、本当にシンプルなマクロだとわかる。