Domanda

Ecco il mio obiettivo: Ho un PC Windows XP con tutto il codice sorgente e un database di sviluppo. Chiamiamolo " pc.dev.XP " ;. Ho un computer di destinazione che esegue Linux. Chiamiamolo " pc.demo.Linux " ;. Ecco cosa ho fatto su " pc.dev.XP " (solo per ottenere il contesto):

  • installato tutto il materiale cygwin
  • ha creato una chiave rsa valida e l'ha messa sul dest computer di backup in modo che ssh non lo faccia chiedi una password
  • rsync funziona piuttosto bene in questo modo

Se provo a farlo su " pc.dev.XP " tramite una riga di comando:

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

funziona perfettamente senza chiedere una password Ora ecco cosa voglio fare su " pc.dev.XP " ;:

  • avvia uno script php che estrae lo sviluppatore. database in un file sql
  • comprimi questo file
  • trasferiscilo via ftp a " pc.demo.Linux "
  • accedi a " pc.demo.Linux " ed esegui " decomprimere quindi mysql -e " sorgente decompresso file "

se corro su " pc.dev.XP " manualmente:

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

funziona perfettamente. Lo stesso per:

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

Se provo a exec () in php (wamp installato su " pc.dev.XP ") quegli script si bloccano. Sono abbastanza sicuro che ciò sia dovuto al fatto che l'utente è " SISTEMA " e non " Fred " ;, e putty o ssh chiedono una password, ma forse mi sbaglio.

Comunque sto cercando un modo per automatizzare quei 4 compiti che ho descritto e sono bloccato perché exec () si blocca. Non ci sono problemi con le direttive safe_exec_mode o safe_exec_dir, sono disabilitate sulla macchina di sviluppo, quindi exec () funziona abbastanza bene se provo alcune cose di base come exec (" dir ")

Qualche idea su cosa potrei fare / controllare / correggere?

È stato utile?

Soluzione 3

Ecco cosa ho fatto: un file batch che:

  1. Chiama un file php tramite " php.exe my_extract_then_compress_then_ftp.php "
  2. Chiama rsync per sincronizzare la cartella di origine
  3. Chiamate putty -l user -pw password -m file_with_ssh_commands_to_execute

Funziona come un fascino.

Altri suggerimenti

Non sono sicuro se questo è ciò di cui hai bisogno, ma in genere utilizzo un costrutto come questo per sincronizzare i database tra macchine:

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

Questo esegue lo script PHP localmente e reindirizza i comandi SQL che lo script stampa attraverso SSH nel processo mysql remoto che li esegue nel database remoto.

Se hai bisogno di compressione, puoi usare lo switch -C di SSH o integrare l'uso del tuo programma di compressione preferito in questo modo:

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

Vuoi farlo da PHP in esecuzione sotto apache, come in vado a http://myWebserver.com /crazyScript.php e tutto questo succede? Oppure vuoi semplicemente scrivere i tuoi script in PHP e invocarli tramite cmd line?

Se vuoi la prima soluzione, prova a eseguire apache / iss con un altro utente che ha le credenziali per eseguire tutte quelle attività.

" se corro sul PC di sviluppo manualmente questo funziona perfettamente. " ;. Perché non farlo così? Quando esegui quello script, suppongo che ti stai connettendo al server SSH locale sulla macchina dev. Quando lo fai, stai usando le credenziali Fred, quindi tutto funziona. Quando esegui lo script PHP, hai ragione che è probabilmente in esecuzione come SYSTEM.

Prova a cambiare l'utente su cui è in esecuzione apache o usa php per connetterti a ssh locale usando quindi credenziali alternative.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top