Bash

無法從 CRON(憑證)執行 AWS CLI

  • March 23, 2021

嘗試執行簡單的 AWS CLI 備份腳本。它遍歷包含文件中的行,將這些路徑備份到 S3,並將輸出轉儲到日誌文件。當我直接執行這個命令時,它執行沒有任何錯誤。當我通過 CRON 執行它時,我的輸出日誌中出現“無法找到憑據”錯誤。

外殼腳本:

AWS_CONFIG_FILE="~/.aws/config"

while read p; do
/usr/local/bin/aws s3 cp $p s3://PATH/TO/BUCKET --recursive >> /PATH/TO/LOG 2>&1
done </PATH/TO/INCLUDE/include.txt

我只是在開始看到錯誤後才將該行添加到配置文件中,認為這可能會解決它(儘管我很確定 AWS 預設情況下就是這樣)。

Shell 腳本以 root 身份執行。我可以在指定位置看到 AWS 配置文件。這一切對我來說都很好(就像我說的,它在 CRON 之外執行良好)。

如果它在您直接執行而不是從 cron 執行時有效,則環境中可能存在一些不同。您可以通過執行以互動方式保存您的環境

set | sort > env.interactive

在你的腳本中做同樣的事情

set | sort > /tmp/env.cron

然後diff /tmp/env.cron env.interactive看看有什麼重要的。像這樣的事情PATH是最有可能的罪魁禍首。

當您從 crontab 執行作業時,您的$HOME環境變數是/

亞馬遜客戶尋找

~/.aws/config

或者

~/.aws/credentials

如果$HOME= /,則客戶端將找不到這些文件

要使其工作,請更新您的腳本,以便它導出一個實際的主目錄$HOME

export HOME=/root

然後將配置或憑據文件放入

/root/.aws/

引用自:https://serverfault.com/questions/614890