以下のスクリプトは、コマンドラインから実行すると正しく実行されます。また、Cronジョブを入れてsftpFileLog.txtにエントリが表示されるので、Cronジョブが実行中であることがわかります。
ただし、Cron Jobで実行するときにsftpLog.txtで見ることができるのは、上部に線を描き、現在の日付/時刻を入れる線だけです。また、予想される2つのファイルは、Cronジョブで実行されたときにSFTPサーバーには表示されません(ただし、Bashスクリプトを直接実行すると表示されます)。
私は「Documents Here」を私が見つけた他のいくつかの記事へのリダイレクトと組み合わせたいと思います。
セキュリティの問題やコーディングの問題がある可能性がありますか?私は経験豊富なITの専門家ですが、bashスクリプトとLinuxは初めてです。 (Ubuntu 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 - - - -
電子メールを追加すると、エラーが発生し、他の2つの場所のいずれかにエラーが表示されないことは信じられません。 1)システムログ2)私のリダイレクトが私が提供したファイルに書き込まない理由です。
私は参照してくださいこの投稿メールを設定して確認する方法についての情報を入手してください。
質問1 - ここで文書と混合されたリダイレクトは完全に間違っていますか? Q2 - Cronで実行すると「ホストキーの確認に失敗しました」というメッセージが表示されますが、直接実行すると表示されないのはなぜですか? user=rootの代わりにuser=nealwaltersを試して、違いがあるかどうかを確認します。
-----パート3--------
「root」から「nealwalters」に変更すると問題が解決するようです。
「stderr」をルーティングしないようです。次のものが必要です:out 2> sftpLog.txt。
ルートにフルアクセス権がありませんか?しかし、秘密鍵が奇妙であり、1人のユーザーだけがアクセスできることを知っています。
答え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をrootとして実行しているようです。自分のユーザーを使用してcronjobを作成することもできますcrontab -e
。
答え2
電子メールを設定して表示する方法については、この記事を参照してください。
stderrとstdoutは当然電子メールで送信されるため、電子メール送信エージェント(MTA)をインストールする必要があります。
aptitude install postfix
ファイルの最後の数行を表示する(またはエディタで開くには)、このようなコマンドを使用します。
tail -f /var/mail/<your_username>
その後、セキュリティエラーを確認し、cronジョブファイルのユーザーを「root」から「」に切り替える必要がありました。