【问题标题】:Bash shell cron script connecting to EC2 — ssh-add failing连接到 EC2 的 Bash shell cron 脚本 — ssh-add 失败
【发布时间】:2026-01-21 01:30:02
【问题描述】:

目标是获得一个连接到 EC2 以下载异地备份的 bash 脚本。我有这个,但我必须继续从终端手动运行它们,因为它们从 crontab 失败并出现错误“权限被拒绝(公钥)”,所以密钥显然无法添加。

我的理解显然存在漏洞。我已经在谷歌搜索了几个小时,但仍然无法正常工作。在让脚本自己添加密钥方面我做错了什么?

#!/bin/sh
# Add the client key so we can SSH in
eval "$(ssh-agent)"
ssh-add ec2-key.pem

# Download the web file backup.
# Example file web1_2013-06-30_00-30.tar.gz
WEBDATE=`date +"%Y-%m-%d"`;
echo $(date) " - Web Backup >> Running secure copy: scp {user}@{ip}:/var/backup/web1/web1_$WEBDATE* site-files/"
scp {user}@{ip}:/var/backup/web1/web1_$WEBDATE* site-files/
... etc ...

【问题讨论】:

  • 您希望从哪里运行该脚本?什么工作目录? ec2-key.pem 文件在哪里?
  • shell 脚本和密钥文件都在 /data/backups/{client_dir_here} 中。所以它们在同一个目录中。
  • 脚本中的相对路径不相对于脚本目录,而是相对于您运行脚本的目录。确保从 /data/backups/{client_dir_here} 运行脚本。

标签: bash amazon-ec2 cron crontab ssh-keys


【解决方案1】:

按照使用脚本和输出文件的完整路径的方式使用密钥的完整路径,它应该可以工作。

如果您想让脚本自动从与脚本相同的目录加载密钥,请参阅Getting the source directory of a Bash script from withinhttp://mywiki.wooledge.org/BashFAQ/028 了解如何执行此操作。

【讨论】: