Как выполнить локальный Shell Script с SSH-командами на сервере? - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу запустить локальный скрипт оболочки с SSH-командами на сервере с использованием PHP. А внутри скрипта я использую ssh, чтобы выполнить команду типа ls -lart и сохранить результат в файле журнала на сервере, а затем с помощью scp скопировать удаленный файл на мой локальный хост. Как то так:

/// my_local_shell.sh

#!/bin/bash
host=$1
user=$2
port=$3
ssh -p $port $user@$host 'ls -lart >> /home/remote/file.log'
scp -P $port $user@$host:/home/remote/file.log /home/local/file.log

Если я запускаю скрипт с помощью терминала user@local_host:~$ ./my_local_shell.sh, все работает просто отлично. Но если я использую shell_exec() для выполнения скрипта с использованием PHP, как это:

<code>/// index.php

$output = shell_exec("my_local_shell.sh 192.168.1.1 root 2222");
echo <pre>$output
;

На экране ничего не печатается, и команды SSH внутри файла не выполняются.

Я знаю, что могу использовать ssh2_shell(), но с его помощью мне пришлось бы отправлять команды внутри PHP, а это не то, что я хочу.
Я уже дал разрешения, необходимые для index.php и my_local_shell.sh

Есть идеи, как мне это сделать?

1 Ответ

0 голосов
/ 19 ноября 2018

Очевидно, что scp использует некоторые типы ncurses, которые вы не можете перехватить, поэтому вы можете добавить флаг -v к вашей команде scp в сценарии оболочки

scp -v -P $port $user@$host:/home/remote/file.log /home/local/file.log

или альтернативно, поскольку scp возвращает 0 в случае успеха, вы можете написать

scp -P $port $user@$host:/home/remote/file.log /home/local/file.log && echo Success

Что касается PHP, проверьте, есть ли у вас открывающие и закрывающие теги PHP, и исправьте выражение echo

<code>echo "<pre>".$output."
";
...