![SSH 및 Expect 스크립트를 사용하여 원격 서버의 파일 개수 계산](https://rvso.com/image/31672/SSH%20%EB%B0%8F%20Expect%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9B%90%EA%B2%A9%20%EC%84%9C%EB%B2%84%EC%9D%98%20%ED%8C%8C%EC%9D%BC%20%EA%B0%9C%EC%88%98%20%EA%B3%84%EC%82%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"
필요한 경우 (보다) 더 의미 있는 작업을 수행할 수 있습니다.