리디렉션이 포함된 SFTP, 여기 문서에는 Cron에 문제가 있습니다.

리디렉션이 포함된 SFTP, 여기 문서에는 Cron에 문제가 있습니다.

아래 스크립트는 명령줄에서 실행할 때 제대로 실행됩니다. 또한 Cron 작업을 넣었고 sftpFileLog.txt에 항목이 표시되므로 Cron 작업이 실행 중이라는 것을 알 수 있습니다.

그러나 Cron Job으로 실행할 때 sftpLog.txt에서 볼 수 있는 것은 상단에 선을 그리고 현재 날짜/시간을 넣는 선뿐입니다. 또한 예상되는 두 파일은 Cron 작업에서 실행될 때 SFTP 서버에 표시되지 않습니다(그러나 Bash 스크립트를 직접 실행할 때는 표시됨).

나는 "Documents Here"를 내가 찾은 다른 여러 기사로의 리디렉션과 결합하려고 합니다.

보안 문제나 코딩 문제가 있을 수 있나요? 저는 숙련된 IT 전문가이지만 bash 스크립팅과 Linux는 처음 접합니다. (우분투 20.04 입니다.)

#!/bin/bash
currentDate=`date`
echo "------- $currentDate ------------------------------------------------------------" >>/home/nealwalters/bin/sftpFileLog.txt

echo "------- $currentDate ------------------------------------------------------------" >>/home/nealwalters/bin/sftpLog.txt

for filename in /home/nealwalters/downloads/*.csv; do
   currentDate=`date`
   echo "Loop: Filename=$filename"
   echo "$currentDate SFTPUser3 Filename=$filename" >> /home/nealwalters/bin/sftpFileLog.txt

   (
   sftp -i /home/nealwalters/keys/SFTPUser1_Private.pem [email protected]  << EOF
      cd User3ToMyCompany
      put $filename
      exit
EOF
   ) >> /home/nealwalters/bin/sftpLog.txt
   echo "----------------------------------------------------------------"
done

sftpLog.txt 파일의 예(노란색으로 강조 표시된 줄은 터미널에서 스크립트를 실행할 때 표시되는 예상 결과이며, 아래 줄은 Cron 작업에서 실행한 후 1분마다 표시됩니다).

여기에 이미지 설명을 입력하세요.

- - - 2 부- - - -

이메일을 추가하면 오류가 발생하고 다른 두 위치 중 하나에 오류가 표시되지 않는다는 것을 믿을 수 없습니다. 1) 시스템 로그 2) 내 리디렉션이 내가 제공한 파일에 기록하지 않는 이유입니다.

나는 참조한다이 게시물이메일을 설정하고 확인하는 방법에 대한 정보를 얻으세요.

질문 1 - 여기 문서와 혼합된 리디렉션이 완전히 잘못된 것인가요? 질문 2 - Cron에서 실행할 때는 "호스트 키 확인 실패" 메시지가 표시되지만 직접 실행할 때는 표시되지 않는 이유는 무엇입니까? user=root 대신 user=nealwalters를 시도하여 차이가 있는지 확인하겠습니다.

여기에 이미지 설명을 입력하세요.

----- 3부 --------

"root"에서 "nealwalters"로 변경하면 문제가 해결되는 것 같습니다.

"stderr"을 라우팅하지 않을 것 같습니다. 다음과 같은 것이 필요합니다: out 2> sftpLog.txt.

루트에 모든 권한이 없나요? 하지만 개인 키가 이상할 수 있고 한 명의 사용자만 액세스할 수 있다는 것을 알고 있습니다.

답변1

단지 터무니없는 추측일 뿐이지만, 이것도 효과가 있을까요? scp -i /home/nealwalters/keys/SFTPUser1_Private.pem /home/nealwalters/downloads/*.csv [email protected]:User3ToMyCompany

~/.ssh/config콘텐츠로 만들 수도 있습니다 .

Host company
  Hostname 192.168.1.179
  User STFPUser3
  IdentityFile /home/nealwalters/keys/SFTPUser1_Private.pem

그런 다음 이렇게 하면 됩니다.

scp /home/nealwalters/downloads/*.csv company:User3ToMyCompany

스크립트를 실행하는 사용자에게 호스트에 대한 호스트 키가 없기 때문에 호스트 키 확인이 실패합니다. cronjob을 루트로 실행하고 있는 것 같습니다. 자신의 사용자를 사용하여 cronjob을 생성할 수도 있습니다 crontab -e.

답변2

이메일을 설정하고 보는 방법에 대한 정보는 이 문서를 참조했습니다.

stderr 및 stdout은 당연히 이메일로 전송되므로 이메일 MTA(Mail Transfer Agent)를 설치해야 합니다.

aptitude install postfix

파일의 마지막 몇 줄을 보려면(또는 편집기에서 열려면) 이와 같은 명령을 사용하십시오.

tail -f /var/mail/<your_username>

그런 다음 보안 오류를 확인하고 cron 작업 파일의 사용자를 "루트"에서 ""로 전환해야 했습니다.

관련 정보