Php: Windows ssh çalıştıran bir Linux giriş ve bir komut dosyası çalıştırmak için

3 Cevap php

Here's my goal : I have a Windows XP PC with all the source code in it ve a development database. Let's call it "pc.dev.XP". I have a destination computer that runs Linux. Let's call it "pc.demo.Linux". Here's what I've done on "pc.dev.XP" (just so you get the context) :

  • Tüm cygwin malzeme yüklü
  • created a valid rsa key ve put it on the dest backup computer so that ssh doesn't ask for a password
  • rsync oldukça iyi bu şekilde çalışır

I bir komut satırı üzerinden "pc.dev.XP" bunu yapmak için deneyin:

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

this works perfectly without asking a password Now here's what I want to do on the "pc.dev.XP":

  • dev ayıklamak bir php komut dosyası başlatmak. Bir sql dosyasına veritabanı
  • Bu zip dosyası
  • "pc.demo.Linux" ftp ile transfer
  • "" pc.demo.Linux "log ve kaynak Çýkartýlan dosyası" daha sonra mysql-e halletmek "yürütmek

Ben el "pc.dev.XP" üzerinde çalıştırırsanız:

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

this works perfectly. Same for :

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

Ben php () ("pc.dev.XP" kurulu WAMP) exec çalışırsanız bu komut onlar sarkar. Kullanıcı "SYSTEM" ve "Fred" ve macun veya ssh bir şifre soracaktır çünkü bu oldukça emin değilim ama belki ben yanlış.

Neyse ben tarif ettik o 4 görevleri otomatikleştirmek için bir yol arıyorum ve exec () kilitleniyor çünkü ben şaşırıp. Ben exec gibi bazı temel şeyler denerseniz safe_exec_mode veya safe_exec_dir direktifleri ile hiçbir sorun yok, onlar) geliştirme makine, böylece exec (devre dışı konum oldukça iyi çalışıyor ("dir")

I / doğru / kontrol yok ne olabilir herhangi bir fikir?

3 Cevap

Here's what I did : a batch file that :

  1. "Php.exe my_extract_then_compress_then_ftp.php" üzerinden bir php dosyasını çağırır
  2. Kaynak klasörü eşitlemek için rsync'yi
  3. Macun-l kullanıcı-pw şifre m file_with_ssh_commands_to_execute Aramalar

Bu bir cazibe gibi çalışır.

Ben bu neye ihtiyacınız olup olmadığından emin değilim, ama ben genellikle makineler arasında veritabanlarını senkronize etmek için böyle bir yapı kullanabilirsiniz:

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

Bu yerel PHP komut çalıştırır ve boruları SQL komut uzak veritabanından onları yürütür uzak MySQL sürecine SSH straigt aracılığıyla yazdırır komutları.

Eğer sıkıştırma gerekiyorsa, SSH en-C anahtarını kullanın veya bu gibi seçtiğiniz sıkıştırma programının kullanımını entegre ya:

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

I http://myWebserver.com/crazyScript.php gidin ve tüm bu olur gibi Sen, PHP apache altında çalışan bu yapmak istiyor? Yoksa sadece PHP betikleri yazmak ve cmd hattı aracılığıyla onları çağırmak istiyorum?

Eğer ilk çözüm istiyorsanız, tüm bu görevleri gerçekleştirmek için kimlik bilgilerine sahip farklı bir kullanıcı altında apache / iss çalıştırmayı deneyin.

"if I run on the development PC manually this works perfectly.". Why not do it like that? When you run that script, I assume you're connecting to the local SSH server on the dev machine. When you do this, you are using the credentials Fred, so everything works. When you run the PHP script, you are right that it is probably running as SYSTEM.

Birini deneyin olarak apache çalıştıran kullanıcı değiştirme veya alternatif kimlik bilgilerini kullanarak böylece yerel ssh bağlanmak için php kullanmak.