Передача переменной PHP в удаленный скрипт bash

1

Есть ли метод, похожий на PHP GET для сценариев bash?

Это то, что я пытаюсь сделать...

PHP файл устанавливает переменную и выполняет удаленный сценарий bash, переменная передается и используется в сценарии bash.

Итак, это мой PHP-скрипт...

 <?php
 $myvar = 'hello world';

 $connection = ssh2_connect('example.com', 22);
 ssh2_auth_password($connection, 'username', 'password');

 $stream = ssh2_exec($connection, '/usr/incoming/myscript.sh');
 ?>

И это myscript.sh на удаленной машине...

 #!/bin/bash          
 echo $myvar

Конечно, это не работает, потому что я не уверен, как передать $ myvar из файла PHP в myscript.sh

Я знаю с PHP, это делается с использованием GET, но как это сделать в этой ситуации?

  • 3
    На параметры в скриптах оболочки ссылаются как на $1 , $2 , $3 ... Просто добавьте их в свой вызов exec: ssh2_exec($connection, '/usr/incoming/myscript.sh param1 param2'); ,
  • 0
    Ваш скрипт не может видеть переменные php. Если вы установите переменную в среде процессов php, то она должна быть доступна в среде сценария оболочки (и в среде всех других процессов, которые запускает ваш сценарий php), и тогда ваш сценарий оболочки должен просто работать. Вы также можете передать переменную скрипту в качестве аргумента в его командной строке.
Показать ещё 4 комментария
Теги:
get
ssh2-exec

3 ответа

-1
Лучший ответ

Как прокомментировал @Phylogenesis, вы хотите просто поместить переменные после вызова сценария, а затем вызвать скрипт bash, используя $1 чтобы прочитать var:

https://eval.in/439053

$stream = "/usr/incoming/myscript.sh " . escapeshellarg($myvar);

Ваш скрипт bash будет выглядеть так:

#!/bin/bash          
 echo "$1"
  • 0
    Это сломается (и сломается плохо), если значение $myvar в php может содержать одинарные кавычки. Переменные, которые должны быть расширены в командной строке, должны быть правильно экранированы, чтобы быть безопасными.
  • 0
    Ах, хорошо, теперь это имеет смысл, так что я передаю его, как вы упомянули выше, а затем вызываю его в сценарии с $ 1, верно?
Показать ещё 8 комментариев
2

Недавно я опубликовал проект, который позволяет PHP получать и взаимодействовать с реальной оболочкой Bash даже через SSH. Получить его здесь: https://github.com/merlinthemagic/MTS

После загрузки вы просто используете следующий код:

$shell = \MTS\Factories::getDevices()->getRemoteHost('example.com')->getShellBySsh('username', 'secretPassword');

//instead of triggering a script, just trigger the individual commands i.e.:
$return1  = $shell->exeCmd("echo \$myvar");
0

script.php

 <?php
 $myvar = 'hello world';
 $myvar = escapeshellarg($myvar);
 $connection = ssh2_connect('example.com', 22);
 ssh2_auth_password($connection, 'username', 'password');
 $stream = ssh2_exec($connection, '/usr/incoming/myscript.sh '.$myvar);

myscript.sh

#!/bin/bash          
echo $1
  • 1
    Это выведет hello из скрипта оболочки, поскольку оболочка $myvar будет $myvar слова. Переменные, которые должны быть расширены в командной строке, должны быть правильно экранированы, чтобы быть безопасными.
  • 1
    я верю, что побег будет

Ещё вопросы

Сообщество Overcoder
Наверх
Меню