Php: запуск ssh из Windows для входа в Linux и запуска скрипта - PullRequest
2 голосов
/ 30 октября 2009

Вот моя цель: У меня есть ПК с Windows XP со всем исходным кодом и база данных для разработки. Давайте назовем это «pc.dev.XP». У меня есть целевой компьютер под управлением Linux. Давайте назовем это «pc.demo.Linux». Вот что я сделал на «pc.dev.XP» (просто чтобы вы получили контекст):

  • установлены все вещи Cygwin
  • создал действительный ключ rsa и поместил его в папку dest резервный компьютер, чтобы ssh не попросить пароль
  • Rsync работает очень хорошо таким образом

Если я попытаюсь сделать это на «pc.dev.XP» через командную строку:

cd \cygwin\bin
ssh Fred@pc.demo.Linux "cd /var/www && ls -al"

это прекрасно работает без пароля Теперь вот что я хочу сделать на «pc.dev.XP»:

  • запустить скрипт php, который извлекает dev. базы данных в файл sql
  • ZIP-файл
  • перенести его через ftp в "pc.demo.Linux"
  • войдите в "pc.demo.Linux" и выполните "unzip затем mysql -e" исходный разархивированный файл "

если я запускаю "pc.dev.XP" вручную:

putty -load "myconf" -l Fred -pw XXX -m script.file.that.unzip.and.integrates.sql

это работает отлично. То же для:

cd \cygwin\bin
ssh Fred@dest "cd /var/www && ls -al"

Если я попытаюсь выполнить exec () в php (wamp, установленный на «pc.dev.XP»), те сценарии, которые они повесят. Я почти уверен, что это потому, что пользователь «SYSTEM», а не «Fred», и putty или ssh запрашивают пароль, но, возможно, я ошибаюсь.

В любом случае, я ищу способ автоматизировать те 4 задачи, которые я описал, и я застрял, потому что exec () зависает. С директивами safe_exec_mode или safe_exec_dir проблем нет, они отключены на компьютере разработчика, поэтому exec () работает довольно хорошо, если я попробую некоторые базовые вещи, такие как exec ("dir")

Есть идеи, что я могу сделать / проверить / исправить?

Ответы [ 3 ]

1 голос
/ 30 октября 2009

Я не уверен, что это то, что вам нужно, но я обычно использую такую ​​конструкцию для синхронизации баз данных между компьютерами:

php extractFromDb.php | ssh user@remote.com "mysql remoteDatabaseName"

Это выполняет скрипт PHP локально и передает команды SQL, которые скрипт выводит через SSH, прямо в удаленный процесс mysql, который выполняет их в удаленной базе данных.

Если вам нужно сжатие, вы можете либо использовать ключ -C SSH, либо интегрировать использование выбранной программы сжатия следующим образом:

php extractFromDb.php | gzip -9 | ssh user@remote.com "gunzip | mysql remoteDatabaseName"
0 голосов
/ 04 ноября 2009

Вот что я сделал: командный файл, который:

  1. Вызывает php-файл через «php.exe my_extract_then_compress_then_ftp.php»
  2. Вызывает rsync для синхронизации исходной папки
  3. Вызывает замазку -l пользователь -pw пароль -m file_with_ssh_commands_to_execute

Работает как шарм.

0 голосов
/ 30 октября 2009

Вы хотите сделать это из PHP, работающего под Apache, как я иду на http://myWebserver.com/crazyScript.php, и все это происходит? Или вы просто хотите написать свои скрипты на PHP и вызывать их через строку cmd?

Если вы хотите первое решение, попробуйте запустить ваш apache / iss под другим пользователем, у которого есть учетные данные для выполнения всех этих задач.

"если я запускаю на компьютере разработчика вручную, это прекрасно работает." Почему бы не сделать это так? Когда вы запускаете этот скрипт, я предполагаю, что вы подключаетесь к локальному SSH-серверу на компьютере разработчика. Когда вы делаете это, вы используете учетные данные Фреда, поэтому все работает. Когда вы запускаете скрипт PHP, вы правы, что он, вероятно, работает как SYSTEM.

Попробуйте либо изменить пользователя, на котором работает apache, либо использовать php для подключения к локальному ssh, используя тем самым альтернативные учетные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...