Pergunta

Aqui é o meu objetivo: Eu tenho um Windows XP PC com todo o código fonte na mesma e um banco de dados de desenvolvimento. Vamos chamá-lo "pc.dev.XP". Eu tenho um computador de destino que executa o Linux. Vamos chamá-lo "pc.demo.Linux". Aqui está o que eu fiz em "pc.dev.XP" (apenas para que você obtenha o contexto):

  • instalado todo o material cygwin
  • criou uma chave RSA válido e colocá-lo no dest computador de backup para que o SSH não pedir uma senha
  • rsync funciona muito bem dessa maneira

Se eu tentar fazer isso em "pc.dev.XP" através de uma linha de comando:

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

Isso funciona perfeitamente sem pedir uma senha Agora, aqui é o que eu quero fazer no "pc.dev.XP":

  • lançar um script php que extrair o desenv. banco de dados em um arquivo sql
  • zip este arquivo
  • transferi-lo via FTP para o "pc.demo.Linux"
  • log ao "pc.demo.Linux" e executar "descompactar então mysql -e "arquivo descompactado fonte"

se eu correr em "pc.dev.XP" manualmente:

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

Isso funciona perfeitamente. Mesmo para:

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

Se eu tentar exec () em php (wamp instalado em "pc.dev.XP") os scripts que pendura. Eu tenho certeza que isso é porque o usuário é "SYSTEM" e não "Fred", e massa de vidraceiro ou ssh pedir uma senha, mas talvez eu esteja errado.

De qualquer forma eu estou procurando uma maneira de automatizar essas 4 tarefas que eu descrevi e eu estou preso por causa exec (trava). Não há nenhum problema com safe_exec_mode ou safe_exec_dir directivas, eles são desativados na máquina de desenvolvimento, assim exec () funciona muito bem se eu tentar algumas coisas básicas como exec ( "dir")

Qualquer idéia que eu poderia fazer / cheque / correto?

Foi útil?

Solução 3

Aqui está o que eu fiz: um arquivo de lote que:

  1. Chama um arquivo php via "php.exe my_extract_then_compress_then_ftp.php"
  2. As chamadas rsync para sincronizar a fonte pasta
  3. As chamadas putty usuário -l -pw senha -m file_with_ssh_commands_to_execute

Ele funciona como um encanto.

Outras dicas

Eu não tenho certeza se é isso que você precisa, mas eu normalmente usam uma construção como este para bancos de dados de sincronização entre máquinas:

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

Este executa o script PHP localmente e canos comandos SQL os script imprime através straigt SSH para o processo mysql remoto que os executa no banco de dados remoto.

Se você precisar de compressão, você pode usar a opção -C do SSH, ou integrar o uso de seu programa de compressão de escolha como esta:

php extractFromDb.php | gzip -9 | ssh user@remote.com "gunzip | mysql remoteDatabaseName"

Você quer fazer isso a partir de PHP em execução no apache, como em eu ir para a http://myWebserver.com /crazyScript.php e tudo isso acontece? Ou você só quer escrever seus scripts em PHP e invocá-los via linha cmd?

Se você quer a primeira solução, tente executar o seu apache / iss sob um usuário diferente que tenha credenciais para realizar todas essas tarefas.

"se eu executar no PC desenvolvimento manualmente isso funciona perfeitamente.". Por que não fazê-lo assim? Quando você executa esse script, eu suponho que você está se conectando ao servidor SSH local na máquina dev. Quando você fizer isso, você está usando as credenciais Fred, então tudo funciona. Quando você executar o script PHP, você está certo de que ele é provavelmente executado como SYSTEM.

Tente quer mudar o usuário que o Apache está sendo executado como ou usar o PHP para se conectar ao ssh local, utilizando, assim, credenciais alternativas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top