Я три дня пытался выполнить bash-скрипт с использованием php.Настройка выглядит следующим образом: php in local machine ---> using aws sdk for php ---> starts an ec2 instance. -
Это работает.После запуска экземпляра ec2 я использую
exec("bash /var/www/html/pushDatToAWS.sh")
Этот bash-файл находится на моей локальной машине, имеет права 777
и принадлежит user:www-data
.Для предоставления учетных данных aws в PHP я использую следующий код:
config.php
<?php
define("KEY",'abcde');
define("SECRET:,'secret');
define("REGION",'region');
define("VERSION" ,'version');
?>
connectToAWS.php
require('config.php');
require 'vendor/autoload.php';
use Aws\Ec2\Ec2Client;
$ec2Client = new Ec2Client([
'region' => REGION,
'version' => '2016-11-15',
'credentials' => [
'key' => KEY,
'secret' => SECRET
],
]);
$action = 'START';
$instanceIds = array('i-abcde');
if ($action == 'START') {
$result = $ec2Client->startInstances(array(
'InstanceIds' => $instanceIds,
));
} else {
$result = $ec2Client->stopInstances(array(
'InstanceIds' => $instanceIds,
));
}
Этот код работает правильно.Я могу подключиться к aws и запустить экземпляр.После запуска экземпляра я пытаюсь выполнить скрипт bash, который завершается неудачно.
exec("bash /var/www/html/pushDatToAWS.sh >> $trainLog");
pushDatToAWS.sh
ipad='12.345.543.21'
while true; do
echo "Checking for Working directory status"
ssh -i /var/www/html/IRISONTHECLOUD_OREGON.pem ubuntu@$ipad "bash /home/ubuntu/irisbuilder/checkWorkingDir.sh $dirName"
if [ $? -eq 0 ]
then
echo 'Working directory status check complete'
break
fi
sleep 1
echo -n
done
Файл pem изменен на 400 и принадлежит username:www-data
.Тем не менее, я получаю сообщение об ошибке:
Load key "/var/www/html/IRISONTHECLOUD_OREGON.pem": Permission denied
ubuntu@12.345.543.21: Permission denied (publickey).
Я нашел блог разработчика aws, рассказывающий о подобной проблеме здесь .Следуя предложению разработчика, я добавил следующее к своему pushDatToAWS.php
putenv('AWS_DEFAULT_REGION=' . REGION);
putenv('AWS_ACCESS_KEY_ID=' . KEY);
putenv('AWS_SECRET_ACCESS_KEY=' . SECRET);
перед вызовом exec(bash ...)
.Я пробовал различные варианты, которые я потерял счет, но я не мог запустить скрипт bash с помощью php.Может ли кто-нибудь привести мне работоспособный пример.Я даже пытался жестко запрограммировать ключ и секрет в php-файле, но все равно не работал, кроме инициации экземпляра ec2.Однако весь скрипт bash отлично работает, когда я запускаю его вручную из терминала.