SSHおよびExpectスクリプトを使用してリモートサーバーのファイル数を計算する

SSHおよびExpectスクリプトを使用してリモートサーバーのファイル数を計算する

以下は、リモートサーバー上のファイル数を数えるスクリプトです。しかし、うまくいきません。

#!/usr/bin/expect

spawn ssh [email protected]
expect "123"
send "123"
interact
destPath='/archive/Input/ERICIN/AIR/EMG'
dayStamp=`(date --date='1 day ago' '+%Y%m%d')`
if [ -d $destPath ]
then
     cd $destPath
     `cat 'emg_audit_1_'$dayStamp.csv|grep 'ACTPSO_NE_'$dayStamp|wc -l > /home/stsuser/eastregioncount/NEremote$dayStamp.txt`
else
        echo "ERROR: Path $destPath Does not Exists."
fi

答え1

これを機能させるには、2つの主な変更をお勧めします。

  1. 公開/秘密鍵ペアの使用
  2. コマンドラインからSSHにコマンドを送信する

ssh-keygenを使用して新しい秘密鍵と公開鍵のペアを作成し、生成されたssh-copy-id公開鍵をを使用して新しいアカウントにインストールできます172.0.0.2expect "123"その後、そのシーケンスを再実行する必要はありません。

これにより、sshコマンドラインからコマンドをより簡単に呼び出すことができます(両方のシステムのタイムゾーンが同じであると仮定)。

destPath='/archive/Input/ERICIN/AIR/EMG'
dayStamp=`(date --date='1 day ago' '+%Y%m%d')`
ssh [email protected] "cd $destPath; cat 'emg_audit_1_'$dayStamp.csv| grep 'ACTPSO_NE_'$dayStamp| wc -l > /home/stsuser/eastregioncount/NEremote$dayStamp.txt"
if [ $? -ne 0 ] 
then 
    echo "ERROR"
fi

cdコマンドはすでに$ destPathが存在しないことを知らせているので、直接エコーする必要はありません。ただしecho "Error"、必要に応じて終了コードをテストし、より意味のある操作を実行できます。

関連情報