![ssh と expect スクリプトを使用してリモート サーバー上のファイルをカウントする](https://rvso.com/image/31672/ssh%20%E3%81%A8%20expect%20%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%20%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E4%B8%8A%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%99%E3%82%8B.png)
以下は、リモート サーバーに存在するファイルの数を数えるスクリプトです。しかし、動作しません。
#!/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 つの大きな変更を提案します。
- 公開鍵/秘密鍵ペアを使用する
- コマンドラインでコマンドをsshに送信する
を使用してssh-keygen
新しい秘密鍵と公開鍵のペアを生成し、 を使用してssh-copy-id
生成した公開鍵を の新しいアカウントにインストールすることができます172.0.0.2
。その後は、このシーケンスを実行する必要はありませんexpect "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"
必要に応じて ( よりも) 意味のある操作を行うことができます。