具有重定向功能的 SFTP,此处文档在 Cron 下存在问题

具有重定向功能的 SFTP,此处文档在 Cron 下存在问题

从命令行运行时,下面的脚本运行良好。我还放入了一个 Cron 作业,并且我知道 Cron 作业正在运行,因为我在 sftpFileLog.txt 中看到了条目。

但是,当在 Cron Job 下运行时,我在 sftpLog.txt 中看到的唯一内容是顶部的一行,该行绘制线条并放置当前日期/时间。另外,我期望的两个文件在 Cron Job 下运行时不会显示在 SFTP 服务器上(但在直接运行 Bash 脚本时会显示)。

我试图将“此处文档”和重定向到我发现的其他几篇文章的文件结合起来。

我是否可能存在安全问题或代码问题?我是一位经验丰富的 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 作业运行后的每分钟)。

在此输入图像描述

- - - 第2部分 - - - -

我不敢相信添加电子邮件会产生错误,而且它不会出现在其他两个地方之一:1)系统日志2)为什么我的重定向没有将其写入我提供的文件中。

我参考了这个帖子获取有关如何设置的信息并查看电子邮件。

问题 1 - 那么我的重定向与此处的文档混合完全错误吗?问题 2 - 为什么当我在 Cron 下运行时会收到“主机密钥验证失败”的消息,而当我自己运行时却不会收到“主机密钥验证失败”消息?我将尝试 user=nealwalters 而不是 user=root 来看看这是否有区别。

在此输入图像描述

----- 第 3 部分 --------

从“root”更改为“nealwalters”似乎解决了这个问题。

我想我没有路由“stderr” - 需要这样的东西:out 2> sftpLog.txt。

root不是有所有权限吗?但我知道私钥可能很奇怪,并且只能访问一个用户。

答案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

主机密钥验证失败的原因是执行脚本的用户没有该主机的主机密钥。您似乎以 root 身份运行 cronjob。您还可以使用您自己的用户创建 cronjob crontab -e

答案2

我引用了这篇文章来获取有关如何设置和查看电子邮件的信息。

必须安装电子邮件 MTA(邮件传输代理),因为 stderr 和 stdout 显然已发送到电子邮件。

aptitude install postfix

使用这样的命令查看文件的最后几行(或在编辑器中打开)

tail -f /var/mail/<your_username>

然后我看到了安全错误,并且必须将 cron 作业文件中的用户从“root”切换到“”。

相关内容