TeraTermマクロでリモートサーバにあるhostsファイルをローカルに自動で転送する方法

TeraTermマクロでリモートサーバにあるファイルをローカルに自動で転送する方法
この記事を読むと・・・
サーバ上のファイルをTeraTermマクロで回収する方法を理解できる
目次

hostsファイル回収マクロサンプル

対象のサーバへログインし、/etc/hostsファイルをローカル環境で受信するマクロのサンプルを作成しました。
流れは、「対象のサーバにログイン⇒SCPでローカル環境でファイルを受信⇒ログアウト」です

以下の手順の通り、自身の環境に合わせて変更してマクロを作成してください。

  1. サンプルをコピーし、任意の名前(拡張子は.ttl)で保存します。
  2. 「保存先のファイル名」にローカルに転送してきたときの保存先とファイル名を記載します(C:\Users\nuko\Desktop\hosts など)
  3. 『IPアドレス』にログインするサーバのIPアドレスを入力します。(192.168.1.11など)
  4. 『ユーザ名』にログインするサーバのユーザ名を入力します。(rootなど)
     ※ただしSCPでローカル環境にファイル転送を行うので、ログインするユーザによってはファイルの所有者や権限の問題で「Permission denied」で転送できない可能性があります。仮に途中でsuコマンドの実行処理を追加し、ユーザを変更する処理を入れたとしても、このSCP処理では初めにログインしたユーザの権限が使用されます。
  5. 『パスワード』にログインに使用するユーザのパスワードを入力します。
  6. wait '#'と記載されている部分はユーザがログインしたときのプロンプトが表示されるのを待つ記述です。なのでログインするユーザによって記載を変更してください。
    プロンプトの設定を変更していなければ、root ユーザは『#』、一般ユーザは『$』を記載してください。
;######################################################################
; マクロ情報
; 説明: /etc/hosts ファイル受信マクロ
; 作成日: 2023/04/07
; 更新日: 2023/04/07
; 更新者: NUKO
;######################################################################

;#######################################################################
; 取得ファイルと保存先情報
SAVEFILEPATH= '保存先のファイル名'
WANTFILEPATH = '/etc/hosts'
;#######################################################################

;#######################################################################
; 接続先情報
HOSTADDR = 'IPアドレス'
USERNAME = 'ユーザ名'
PASSWORD = 'パスワード'
;######################################################################

;######################################################################
; ssh接続処理
COMMAND = HOSTADDR
strconcat COMMAND ':22 /ssh /2 /auth=password /user='
strconcat COMMAND USERNAME
strconcat COMMAND ' /passwd='
strconcat COMMAND PASSWORD
;######################################################################

; 接続
connect COMMAND

; プロンプト表示確認
wait '#'

; ファイル受信
scprecv WANTFILEPATH SAVEFILEPATH

; 受信完了確認(scprecvは非同期処理)
do
    mpause 3000
    sendln 'ps -ef | grep -v grep | grep -c "'WANTFILEPATH'"'
    ; コマンドを受信
    recvln
    ; コマンド実行結果を受信
    recvln
    ; コマンド実行結果が'0'かどうか判定
    strcompare inputstr '0'
    loop while result != 0
;; ファイル送信が完了すると次のマクロを実行
sendln 'exit'

;; マクロ終了
end

補足ですが、マクロに記載されているWANTFILEPATH = '/etc/hosts'/etc/hosts部分を回収したいファイルパスに変更すれば、他のファイルの取得可能です。

hostsファイル回収マクロの解説

マクロの前半に記載されているログインの処理の内容を知りたい方は以下の記事を参照してください。


まず、ローカル環境でファイルを受信する処理です。

scprecvはローカル環境から見たときに、SCPプロトコルでファイルを受信する際に使用するコマンドです。
scprecv <リモート環境のファイルパス> <ローカル環境のファイルパス>でファイルを受信することを表しています。

; ファイル受信
scprecv WANTFILEPATH SAVEFILEPATH


続いて受信完了の判定処理です。

先ほど説明したscprecvは非同期処理で行われます。そのため、いつファイルの受信処理が完了したかを判別する必要があります。

各行の処理を説明します。

mpause 3000は3秒間マクロの処理を休止することを表しています。(後続のプロセス確認処理を3秒ごとに確認するため)

; 受信完了確認(scprecvは非同期処理)
do
mpause 3000
sendln ‘ps -ef | grep -v grep | grep -c “‘WANTFILEPATH'”‘
; コマンドを受信
recvln
; コマンド実行結果を受信
recvln
; コマンド実行結果が’0’かどうか判定
strcompare inputstr ‘0’
loop while result != 0
;; ファイル送信が完了すると次のマクロを実行
sendln ‘exit’

よかったらシェアしてね!
  • URLをコピーしました!
目次