2014-10-29

TeraTermマクロにてsshログイン自動化③(踏み台RSA認証+多段ログイン)

前回記事



前回はRSA公開鍵認証にてログインするマクロを作成しました。
通常、企業のネットワードではインターネット上からsshアクセスできるサーバを踏み台と呼び、そこをセキュアにすることで不正アクセスを防御します。
その1つの方法がRSA公開鍵認証ということになります。
この踏み台サーバは通常上記の理由から機密情報の保持はせず、「踏み台」としての機能だけに限定します。
踏み台サーバにアクセスできる人をRSA認証にて限定し、そこにログインできる人は、さらに内部のシステムサーバに多段sshアクセスによりログインするという形になると思います。

今回はRSA認証にて踏み台サーバにアクセスし、さらにその先にある内部ネットワーク上のサーバにログインすることを想定した自動ログインマクロを作成します。




前提条件


あらかじめログインする踏み台サーバにはSSHクライアントで作成した公開鍵が登録されているものとします。
また、踏み台サーバから内部ネットワーク上のサーバへのsshアクセスができる状態にされているものとします。


RSA認証を用いて踏み台sshログイン、踏み台からさらに内部サーバにsshログイン


テキストエディタ等で次のコードを記載し、loginThroughFumidai.ttlとします。

loginThroughFumidai.ttl の中身

;==================================
; 定数定義

FUMIADDR = 'XXX.XXX.XXX.XXX'
USERNAME = 'xxxxxx'

; 接続サーバの選択
inputbox '接続サーバ名を入力して下さい。\n ※キャンセルは空白にしてOK\n' '接続サーバ入力' 1
varHostAddr = inputstr

; ファイルパスの設定
getdir varPassFile
strconcat varPassFile '\'
strconcat varPassFile 'pass.dat'
getdir varKeyFile
strconcat varKeyFile '\'
strconcat varKeyFile 'id_rsa'

; SSH認証のパスフレーズ取得
getpassword varPassFile 'SSHAUTH_PASS-PHRASE' varPassPhrase
; SSH接続時のパスワード取得
getpassword varPassFile 'SSHLOGIN_PASSWORD' varPassword

; 踏み台サーバsshログイン
varConnect = FUMIADDR
strconcat varConnect ':22 /ssh /2 /auth=publickey /user='
strconcat varConnect USERNAME
strconcat varConnect ' /passwd='
strconcat varConnect varPassPhrase
strconcat varConnect ' /keyfile='
strconcat varConnect varKeyFile
connect varConnect

; 目的サーバsshログイン
wait USERNAME
varCmd = 'ssh '
strconcat varCmd USERNAME
strconcat varCmd '@'
strconcat varCmd varHostAddr
sendln varCmd
wait USERNAME
sendln varPassword

;==================================
xxxxxxの部分はログインユーザ名に書き換えてください。
XXX.XXX.XXX.XXXの部分はアクセスする内部サーバアドレスに書き換えてください。


マクロコード説明


  • getpasswordコマンド
初回実行時、ttlマクロファイルと同じフォルダにpass.datというパスワードファイルを作成し、入力されたパスワードを暗号化して保存します。
2回目以降は、pass.datファイルから自動的にパスワードを読み込んで処理しますので完全自動化となります。
次の2つが記録されます。
・'SSHAUTH_PASS-PHRASE':SSH認証のパスフレーズ取得
・'SSHLOGIN_PASSWORD':SSH接続時のパスワード取得

  • sendlnコマンド
指定した文字列(文字列が格納された変数)をコンソールに入力し、エンターキーを送信します。

  • waitコマンド
通常sendlnコマンドと対で使用します。指定した文字列(文字列が格納された変数)がコンソールに出力されるまで待機します。
上記の例では、USERNAME(ログインユーザ名)が出力されるまで待つということになりますが、
これは内部サーバにsshログインコマンド(ssh xxxxxx@XXX.XXX.XXX.XXX)を送信した後に表示されるコンソールメッセージが
「 xxxxxx@XXX.XXX.XXX.XXX's password: 」と表示されることを想定しています。なのでこのメッセージが異なる場合はwaitする文字列を適宜に修正してください。