从php执行AWS CLI命令导致无法定位凭据

omjgkv6w  于 2023-06-20  发布在  PHP
关注(0)|答案(7)|浏览(133)

我试图使用shell exec从php代码中运行aws s3 cp命令。下面是PHP代码。

echo shell_exec("sudo aws s3 cp s3://<bucket>/somefolder/somefile s3://<bucket>/someotherfolder/somefile --region ap-southeast-1 --acl public-read");

文件没有被复制,echo的输出如下
“无法找到凭据已完成% 1部分,使用...剩余的文件”

注1:我已经使用aws configure命令设置了凭证
注2:如果我直接在终端运行完全相同的命令,它可以正常工作。

你知道吗?

ecr0jaav

ecr0jaav1#

这对我很有效:

<?php

    putenv('AWS_DEFAULT_REGION=your-region');
    putenv('AWS_ACCESS_KEY_ID=YOURACCESSKEYID');
    putenv('AWS_SECRET_ACCESS_KEY=YOURSECRETACCESSKEY');

    $output = shell_exec('aws s3 cp ./file.txt s3://MYBUCKETID/ 2>&1');
    echo "<pre>$output</pre>";

?>
wgxvkvu9

wgxvkvu92#

AWS CLI在~/.aws/config中设置凭据,aws php sdk在~/.aws/credentials中查找它们。
所以:

cd ~/.aws
mv config credentials

解决了我认为对我来说同样的问题。

twh00eeo

twh00eeo3#

在你的终端上,你可以运行:

$ cat ~/.aws/config
[profile eb-cli]
aws_access_key_id = XXXXXX
aws_secret_access_key = XXXXXX

$ aws configure

然后你会被要求4个值:
1.访问密钥ID(访问密钥)-这是两个值中较短的一个。
1.秘密访问密钥
1.默认地区名称(键入“us-east-1”)
1.输出格式(键入'json')
然后

$ aws s3 sync s3://<bucketname>
ccrfmcuu

ccrfmcuu4#

看起来像是配置文件的权限/位置问题。
使用AWS CLI设置的凭据写入 * 当前用户的 * 路径中的特殊文件中。PHP我猜是在其他权限下执行的(不是同一个用户)。我建议你应该把配置放在一个单独的文件中,并通过这种方式传递给CLI。您还需要确保特定的环境变量在PHP shell_exec中可用。

xghobddn

xghobddn5#

要从user 1464317扩展,请执行以下操作:
我发现这个问题存在于约塞米蒂vs Mavericks。AWS CLI for Mavericks在“~/.aws/config”中查找权限,而约塞米蒂在“~/.aws/credentials”中查找权限。
如果使用cron,可以在crontab -e中设置环境变量,如下所示:

# Mavericks
AWS_CONFIG_FILE="/Users/YOUR_USER/.aws/config"

# Yosemite
AWS_CONFIG_FILE="/Users/YOUR_USER/.aws/credentials"

或者按照user 1464317的提示,移动文件:

mv config credentials
kr98yfug

kr98yfug6#

要解决此问题,请执行以下步骤:
1.将.aws目录从/home/non-rootUser/.aws复制到/var/www
1.现在将目录更改为/var/www(cd /var/www)
1.更改权限:/www$ sudo chmod -R 755 .aws
1.更改所有权/www$ sudo chown -R $USER:$USER .aws
1.复查

roejwanj

roejwanj7#

我遇到了同样的问题。最后我用这个解决了。

putenv('AWS_CONFIG_FILE=your-credential-file');
exec(...)

php用户似乎找不到正确的凭证文件。它可以通过设置环境变量来修复。

相关问题