💭

SSHログイン用のTeraTermマクロ作成

2024/06/15に公開

TeraTermを利用してパブリッククラウド上のサーバにSSH接続する際、
セキュリティの観点から公開鍵認証方式を採用しているのですが、
接続する度にIPや鍵が格納されてるパスを入力するのが面倒なので
TeraTermMacroを作成してログインの手間を省こうと思います。

目次

1.使い方
2.パスワード認証ログイン
3.公開鍵認証ログイン
4.サーバを選択してログイン
5.踏み台経由してサーバログイン

1.使い方

TeraTermマクロは、拡張子がttlのファイルに記述されている実行内容を、そのttlファイルを実行するだけで自動で一連の処理が行われる。
ttlファイルの実行方法は主に2つ。1つは、TeraTermからttlファイルを選択して実行する方法。他方は、ttlファイルをダブルクリックして実行する方法。後者の方法では、Teratermインストール時にttlファイルの関連付けを行わなかった場合、事前にttlファイルをTeraTermマクロで実行するように関連付け設定を行う必要がある。

1.1TeraTermから実行

TeraTermアイコンをクリックすると、下図のような画面になるので
新しい接続先を入力する画面を「×」で消した後、上部のメニューから「コントロール」を選択し、「マクロ(M)」をクリック。
image.png

すると、teratermのフォルダ(C:\Program Files (x86)\teraterm)が表示されるので、そこに事前に配置しておいた実行したいttlファイルをクリックするか、もしくは別のファルダまで移動して所望のttlファイルをダブルクリック。

1.2ttlファイルをダブルクリック実行

まずは、どれか一つ実行したいttlファイルを右クリックして「プロパティ」を開く。「全般」の「変更」をクリックし、ttlファイルを開く方法としてアプリが表示されるので、「このPCで別のアプリを探す」を選択。image.png

TeraTermのフォルダ(C:\Program Files (x86)\teraterm)まで移動し、「ttpmacro.exe」をダブルクリックし、プロパティの「適用」を押して「OK」をする。

image.png

以上の関連付け設定を無事完了させると、ttlファイルをダブルクリックするだけでTeraTermマクロを実行できるようになる。

2.パスワード認証ログイン

timeout=5
;-------------------------------------------------------
;ログイン情報
HOSTIP = 'a.a.a.a'
USERNAME = 'hoge'
PASSWORD = 'hoge'
;-------------------------------------------------------

;-------------------------------------------------------
;SSHログイン
msg = HOSTIP
strconcat msg ':22 /ssh /auth=password /user='
strconcat msg USERNAME
strconcat msg ' /passwd='
strconcat msg PASSWORD

connect msg

end

3.公開鍵認証ログイン

公開鍵認証方式の場合は、パスワード認証方式で/auth=passwordとしていたところを、/auth=publickeyに書き換え、鍵のパスを指定するだけ。

timeout=5
;-------------------------------------------------------
;ログイン情報
HOSTIP = 'a.a.a.a'
USERNAME = 'hoge'
PASSWORD = 'hoge'
KEYFILE = 'C:/XXX/YYY.key'
;-------------------------------------------------------

;-------------------------------------------------------
;SSHログイン
msg = HOSTIP
strconcat msg ':22 /ssh /auth=publickey /user='
strconcat msg USERNAME
strconcat msg ' /keyfile='
strconcat msg KEYFILE

connect msg

end

4.サーバを選択してログイン

SSH接続したいサーバごとにTeraTermマクロを作成するのは面倒。
ということで、マクロを実行する際に接続先サーバを指定してログインできるようにする。下図のように選択画面を出す。
image.png

timeout=5
;-------------------------------------------------------
;接続先ホスト別情報
HOSTIP1 = 'a.a.a.a'
USERNAME1 = 'hoge'
PASSWORD1 = 'hoge'
KEYFILE1 =  'C:/XXX/YYY.key'
HOSTNAME1 = 'サーバ1'

HOSTIP2 = 'b.b.b.b'
USERNAME2 = 'hoge'
PASSWORD2 = 'hoge'
KEYFILE2 =  'C:/XXX/YYY.key'
HOSTNAME2 = 'サーバ2'
;-------------------------------------------------------

;-------------------------------------------------------
;選択画面
sprintf '【1】:%s %s【2】:%s %s' HOSTNAME1 #10 HOSTNAME2 #10
inputbox inputstr 'SSH接続対象を選択:'
str2int INPUTINT inputstr

if INPUTINT = 1 then
  HOSTIP = HOSTIP1
  USERNAME = USERNAME1
  KEYFILE = KEYFILE1
elseif INPUTINT = 2 then
  HOSTIP = HOSTIP2
  USERNAME = USERNAME2
  KEYFILE = KEYFILE2
else
  messagebox '選択肢外が入力されました' '入力エラー' 
endif
;-------------------------------------------------------

;-------------------------------------------------------
;SSHログイン
msg = HOSTIP
strconcat msg ':22 /ssh /auth=publickey /user='
strconcat msg USERNAME
strconcat msg ' /keyfile='
strconcat msg KEYFILE

connect msg

end

5.踏み台経由してサーバログイン

パブリックサブネット内に配置されているサーバを踏み台にして、プライベートサブネット内にあるサーバへssh接続する方法。

timeout=5
;-------------------------------------------------------
;接続先ホスト別情報
HOSTIP1 = 'a.a.a.a'
USERNAME1 = 'hoge'
PASSWORD1 = 'hoge'
KEYFILE1 =  'C:/XXX/YYY.key'
HOSTNAME1 = 'サーバ1'

HOSTIP2 = 'b.b.b.b'
USERNAME2 = 'hoge'
PASSWORD2 = 'hoge'
KEYFILE2 =  'C:/XXX/YYY.key'
HOSTNAME2 = 'サーバ2'
;-------------------------------------------------------

;-------------------------------------------------------
;選択画面
sprintf '【1】:%s %s【2】:%s %s' HOSTNAME1 #10 HOSTNAME2 #10
inputbox inputstr 'SSH接続対象を選択:'
str2int INPUTINT inputstr
;-------------------------------------------------------


;-------------------------------------------------------
;SSHログイン
if INPUTINT = 1 then
  msg = HOSTIP1
  strconcat msg ':22 /ssh /auth=publickey /user='
  strconcat msg USERNAME1
  strconcat msg ' /keyfile='
  strconcat msg KEYFILE1
  connect msg

elseif INPUTINT = 2 then
  msg = HOSTIP1
  strconcat msg ':22 /ssh /auth=publickey /user='
  strconcat msg USERNAME1
  strconcat msg ' /keyfile='
  strconcat msg KEYFILE1
  connect msg
  wait '$' ;プロンプトを待つ
  msg = 'ssh '
  strconcat msg USERNAME2
  strconcat msg '@'
  strconcat msg HOSTIP2
  sendln msg
  wait 'password'
  sendln PASSWORD2
else
    messagebox '選択肢外が入力されました' '入力エラー' 
    end
endif

end

Discussion