TeraTermマクロを使って、Linux上の指定ファイルダウンロードを自動化

Linux

Linuxのシステムを保守している技術者が日々直面するシーンとして、”特定のログファイルを取得する”という場面があるかと思います。


例えば、一日に1回、アプリケーションのログやミドルウェアのログを収集して、変なエラーが出てないか?を調査したりする場合ですね。


特に、サービスのローンチ直後はよくある場面かと思います。


今回は、TeraTermマクロを使って、ログイン→圧縮ファイル作成→ダウンロードを自動的に実施するマクロを紹介します。


いちいち、ログインしてー、ファイル圧縮してー、ダウンロードしてー、って面倒ですもんね!?

環境情報

今回は、WindowsマシンにTeraTermがインストールされている状態を前提とします。

TeraTermを使って、Linuxサーバにログインします。


  • クライアントOS:Windows7
  • ターミナルエミュレータ:TeraTerm
  • サーバOS:Linux

マクロを使って自動ログイン

自動ログインの部分は、以前、作成した記事を参照してください。



今回は、“パスの指定” “ダウンロード” の部分を中心に解説していきます。


マクロで自動ログインしてダウンロードまで

とりあえず、作成したマクロを紹介します。

このマクロで、“自動ログイン”→”対象フォルダへの移動”→”圧縮してダウンロード”が可能です。


; sample TeraTerm Macro
;
; FILE:     fileGet.ttl
; create:   2019/07/21
; Author:   SakuSaku

call login
call setCur
call dwnload
sendln 'exit'
end

;
; ログイン
;
:login
    ; ホスト名とログインアカウントを定義
    host = 'sakusaku.com:22'
    account = 'sakusaku'

    ; リモート認証に必要な固定文字列を定義
    msg = 'Enter password for user '
    strconcat msg account
    passwordbox msg 'Get password'

    ; 「msg」を作業領域とし、リモート認証に必要な文字列を作成する
    msg = host
    strconcat msg '/ssh /auth=password /user='
    strconcat msg account
    strconcat msg ' /passwd='
    strconcat msg inputstr

    ; 認証する
    connect msg
return

;
; 指定フォルダに移動
;
:setCur
    ; 入力できる状態までまつ
    wait '$ '

    ; フォルダを入力
    inputbox 'フォルダを指定してください(/区切り):' 'フォルダ入力'
    strscan inputstr '/'
    if result <= 0 then
        messagebox '正しいパスを指定して下さい' 'エラー'
        end
    endif

    ; 指定されたフォルダに移動
    cmd = "cd "
    strconcat cmd inputstr
    sendln cmd
return

;
; ダウンロード
;
:dwnload
    ; 入力できる状態までまつ
    wait '$ '

    ; テキストファイルを、すべてzipファイル化
    cmd = "find *.txt | zip -@ file.zip"
    sendln cmd

    ; 入力できる状態までまつ
    wait '$ '

    ; 圧縮ファイルのフルパスを取得
    sendln 'pwd'
    recvln
    recvln
    zipFile = inputstr
    strconcat zipFile '/file.zip'

    ; ダウンロード先のフルパスを取得
    getdir localfile
    strconcat localfile '/file.zip'

    ; ファイルをダウンロード
    scprecv zipFile localfile

return

それでは、ポイントを説明していきます。

ダウンロードマクロのポイント

loginメソッドのマクロについては、以下の記事を参照してください。


フォルダの指定はユーザ指定が可能

このマクロは、Linux上に存在する特定フォルダ配下のファイルを圧縮して、マクロが存在するクライアントPCの指定フォルダに圧縮ファイルをダウンロードします。


圧縮するファイルが存在するLinux上のフォルダですが、このマクロではユーザによる指定を可能としています。


マクロの「setCur」メソッドが、該当箇所になります。

具体的には以下の箇所。


    inputbox 'フォルダを指定してください(/区切り):' 'フォルダ入力'
    strscan inputstr '/'
    if result <= 0 then
        messagebox '正しいパスを指定して下さい' 'エラー'
        end
    endif

inputboxで入力ダイアログを表示し、受け取った文字列に「」’/’を付加して、パスを作成しています。


フォルダ入力ダイアログ

マクロが存在するフォルダにダウンロード

ダウンロードするまでに、いくつかの処理があります。


まずは、圧縮ファイルを作成しています。

拡張子が「txt」のファイルを検索して、file.zipという圧縮ファイルにまとめています。

    ; テキストファイルを、すべてzipファイル化
    cmd = "find *.txt | zip -@ file.zip"
    sendln cmd

次に圧縮ファイルのフルパス作成です。

ここでのフルパスは、Linux上にzipファイルのフルパスです。

現在フォルダ(pwd) + file.zip としています。

    ; 圧縮ファイルのフルパスを取得
    sendln 'pwd'
    recvln
    recvln
    zipFile = inputstr
    strconcat zipFile '/file.zip'

最後にファイルダウンロードです。

 

注意しなければいけないのが、「localfile」になります。

これは、”マクロが存在する場所”になります。

 


ダウンロード自体は簡単で、「scprecv」を呼び出すだけです。

「scprecv」で、セキュアなファイルダウンロードが可能になります。

    ; ダウンロード先のフルパスを取得
    getdir localfile
    strconcat localfile '/file.zip'

    ; ファイルをダウンロード
    scprecv zipFile localfile

まとめ

いかがでしたでしょうか?

TeraTermマクロを使って、ファイルをダウンロードするやり方がわかったかと思います。

まとめ
  • ユーザ入力は「inputbox 」で表示可能
  • ファイルのダウンロードは「scprecv 」

それではまた。