Pocket

先日作成したPythonスクリプトで鍵認証対応させたので、Teratermマクロでもやってみる。

1.SSHAutoLogin.ttl

変更点としては、こちらの内容に鍵認証を加えただけだ。

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;  Filename : SSHAutoLogin.ttl
;  Description : SSH Auto login - host selection listbox from host.list
;  Author : Blacknon
;  Created : 2015/01/18
;  Modified : 2015/11/10
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
;;-------------------------------------------------------
;; 接続時の基本的な情報を設定する
;;-------------------------------------------------------
;; ホストに関する情報をもつファイル「host.list」の場所を設定する
 HOST_FILE = "host.list"
 
;; ログイン時に実行させるコマンドの情報をもつファイル「command.list」の場所を設定する
 COMMAND_FILE = "command.list"
 
;; ログ作成用ディレクトリの情報を取得する
 Getdir CurrentDir
 LOG_DIR_PATH = CurrentDir
 Strconcat LOG_DIR_PATH '\log\'
 
;;-------------------------------------------------------
;; ホスト選択画面を作成する
;;-------------------------------------------------------
;; ホストファイルの行数を取得する
 Fileopen HOST_LIST HOST_FILE 0
 i = 0
 While
     Filereadln HOST_LIST LIST_LINE
 
    ;;ファイル読み込みの終了処理
     If result = 1 Break
 
    ;; 空白行を無視する
     Strlen LIST_LINE
     If result = 0 continue
 
    ;; 「#」から始まる行をコメントとして無視
     Strmatch LIST_LINE '^#'
     If result <> 0 continue
 
     i=i+1
 EndWhile
 
;; 配列を作成
 Strdim HOST_NAME i
 Strdim HOST_IP i
 Strdim KEY_FILE i
 Strdim HOST_USER i
 Strdim HOST_PASS i
 Strdim HOST_ROOT_USER i
 Strdim HOST_ROOT_PASS i
 Strdim HOST_SUDO_FLAG i
 
;; ホストに関する情報をホストファイルから取得する
 Fileopen HOST_LIST HOST_FILE 0
 i = 0
 While
     Filereadln HOST_LIST LIST_LINE
 
    ;;ファイル読み込みの終了処理
     If result = 1 Break
 
    ;; 空白行を無視する
     Strlen LIST_LINE
     If result = 0 continue
 
    ;; 「#」から始まる行をコメントとして無視
     Strmatch LIST_LINE '^#'
     If result <> 0 continue
 
    ;;ホストに関する情報を各変数へ代入する
     Strsplit LIST_LINE ','
     HOST_NAME[i]      = Groupmatchstr1
     HOST_IP[i]        = Groupmatchstr2
     KEY_FILE[i]       = Groupmatchstr3
     HOST_ROOT_USER[i] = Groupmatchstr4
     HOST_ROOT_PASS[i] = Groupmatchstr5
     HOST_USER[i]      = Groupmatchstr6
     HOST_PASS[i]      = Groupmatchstr7
     HOST_SUDO_FLAG[i] = Groupmatchstr8
 
     i=i+1
 Endwhile
 
;; ホスト選択画面を表示させる
 listbox 'ログインするホストを選択してください' 'ホスト選択' HOST_NAME
 
;;-------------------------------------------------------
;; 選択されたホストにログインを行う
;;-------------------------------------------------------
;; ホスト選択画面で選択されたホストの情報を変数に代入する
 If result >= 0 then
     HOST_CONNECT_NAME      = HOST_NAME[result]
     HOST_CONNECT_IP        = HOST_IP[result]
     HOST_CONNECT_KEY_FILE  = KEY_FILE[result]
     HOST_CONNECT_ROOT_USER = HOST_ROOT_USER[result]
     HOST_CONNECT_ROOT_PASS = HOST_ROOT_PASS[result]
     HOST_CONNECT_USER      = HOST_USER[result]
     HOST_CONNECT_PASS      = HOST_PASS[result]
     HOST_CONNECT_SUDO_FLAG = HOST_SUDO_FLAG[result]
 Else
     End
 Endif
 
;; ログイン用のユーザーが定義されているか確認する
 Strlen HOST_CONNECT_USER
 If result <> 0 Then
     SSH_CONNECT_USER        = HOST_CONNECT_USER
     SSH_CONNECT_PASS        = HOST_CONNECT_PASS
 Else
     SSH_CONNECT_USER        = HOST_CONNECT_ROOT_USER
     SSH_CONNECT_PASS        = HOST_CONNECT_ROOT_PASS
 Endif
 
;; SSH接続コマンドを作成する
 COMMAND = HOST_CONNECT_IP
 Strconcat COMMAND ':22 /ssh /2 /user='
 Strconcat COMMAND SSH_CONNECT_USER
 
 Strlen SSH_CONNECT_PASS
 If result <> 0 Then
     Strconcat COMMAND ' /passwd='
     Strconcat COMMAND SSH_CONNECT_PASS
 Endif
 
 Strlen HOST_CONNECT_KEY_FILE
 If result <> 0 Then
     Strconcat COMMAND ' /auth=publickey'
     Strconcat COMMAND ' /keyfile='
     Strconcat COMMAND HOST_CONNECT_KEY_FILE
 Else
     Strconcat COMMAND ' /auth=password'
 Endif
 
 
;; SSH接続を行う
 Connect COMMAND
 
;;-------------------------------------------------------
;; ログの記録を開始する
;;-------------------------------------------------------
;; ログ名に利用する日付情報を取得する
 Getdate Str_Getdate
 Strcopy Str_Getdate 1 4 Str_Year
 Strcopy Str_Getdate 6 2 Str_Mon
 Strcopy Str_Getdate 9 2 Str_Day
 
;; ログ名に利用する時刻情報を取得する
 Gettime Str_Gettime
 Strcopy Str_Gettime 1 2 Str_Hour
 Strcopy Str_Gettime 4 2 Str_Min
 Strcopy Str_Gettime 7 2 Str_Sec
 
;; ログ名を生成する
 LOG_PATH = LOG_DIR_PATH
 Strconcat LOG_PATH Str_Year
 Strconcat LOG_PATH Str_Mon
 Strconcat LOG_PATH Str_Day
 Strconcat LOG_PATH '_'
 Strconcat LOG_PATH Str_Hour
 Strconcat LOG_PATH Str_Min
 Strconcat LOG_PATH Str_Sec
 Strconcat LOG_PATH '_'
 Strconcat LOG_PATH HOST_CONNECT_NAME
 Strconcat LOG_PATH '.log'
 
;; 現在記録しているログの情報を取得する
 Loginfo NOW_LOG_PATH
 
;; 現在ログが記録されていた場合、マクロで規定したフォルダに移動する
 If result <> -1 Then
     ;; 一度ログの記録を停止する
      Logclose
 
     ;; 取得されていたログをマクロで規定した場所にコピーする
      Filecopy NOW_LOG_PATH LOG_PATH
 
     ;; 取得されていたログを削除する
      Filedelete NOW_LOG_PATH
 Endif
 
;; ログの記録を開始する
 Logopen LOG_PATH 0 1 1 1
 
;;-------------------------------------------------------
;; Command.listの内容を実行させる
;;-------------------------------------------------------
;; host.listでログインユーザの設定がされていたか確認する
 Strlen HOST_CONNECT_USER
 If result <> 0 Then
      Wait '$' '#'
      Sendln ''
 
      Wait '$' '#'
      Sendln '#rootユーザーにスイッチする'
 
     ;; 「sudo su -」でスイッチする必要がある場合
      Strlen HOST_CONNECT_SUDO_FLAG
      If Result > 0 Then
          Wait '$' '#'
          Sendln 'sudo su -'
 
          Wait ':'
          Sendln SSH_CONNECT_PASS
      Else
          Wait '$' '#'
          Sendln 'su -'
 
          Wait ':'
          Sendln HOST_CONNECT_ROOT_PASS
      Endif
 Endif
 Wait '$' '#'
 Sendln ''
 
;; Command.listを読み込む
 Fileopen COMMAND_LIST COMMAND_FILE 0
 While 1
      Filereadln COMMAND_LIST COMMAND_LIST_LINE
      If RESULT = 1 Break
 
      Flushrecv
      Wait '$' '#'
      Sendln COMMAND_LIST_LINE
 Endwhile
 Fileclose COMMAND_LIST
End
Sponsored Links

2.host.list

host.listについては、Pythonスクリプトと同じものを使用するので割愛。
command.listについても改修前のものをそのまま使用する。

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

This article has 1 comments

  1. Pingback: PowerShellでリストボックスを使ったリモートデスクトップ(RDP)自動接続スクリプト | 俺的備忘録 〜なんかいろいろ〜

Leave a Comment

メールアドレスが公開されることはありません。