![Подсчет файлов на удаленном сервере с помощью ssh и ожидаемого скрипта](https://rvso.com/image/31672/%D0%9F%D0%BE%D0%B4%D1%81%D1%87%D0%B5%D1%82%20%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2%20%D0%BD%D0%B0%20%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%BC%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20ssh%20%D0%B8%20%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%B5%D0%BC%D0%BE%D0%B3%D0%BE%20%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0.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
Чтобы это заработало, я бы предложил два основных изменения:
- использовать пары открытого/закрытого ключей
- отправлять команды в командной строке на 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"
), если необходимо.