Подсчет файлов на удаленном сервере с помощью ssh и ожидаемого скрипта

Подсчет файлов на удаленном сервере с помощью ssh и ожидаемого скрипта

Ниже представлен мой скрипт для подсчета файлов, которые присутствуют на удаленном сервере. Но он не работает.

#!/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

Чтобы это заработало, я бы предложил два основных изменения:

  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"), если необходимо.

Связанный контент