PHP:Windowsからsshを実行してLinuxにログインし、スクリプトを実行する

StackOverflow https://stackoverflow.com/questions/1649515

  •  22-07-2019
  •  | 
  •  

質問

これが私の目標です。 すべてのソースコードと開発データベースを備えたWindows XP PCがあります。 それを「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"でやりたいことです:

  • devを抽出するphpスクリプトを起動します。データベースをsqlファイルに
  • このファイルを圧縮
  • ftpを介して" pc.demo.Linux"に転送します
  • " pc.demo.Linux"へのログ" unzipを実行してからmysql -e" source unziped file"

" 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"

php(" pc.dev.XP"にインストールされたwamp)でexec()しようとすると、それらのスクリプトがハングします。これは、ユーザーが「システム」であるためだと確信しています。 " Fred"ではなく、puttyまたはsshがパスワードを要求しますが、多分間違っています。

とにかく、私が説明したこれらの4つのタスクを自動化する方法を探していますが、exec()がハングするために立ち往生しています。 safe_exec_modeディレクティブまたはsafe_exec_dirディレクティブに問題はありません。開発マシンでは無効になっているため、exec(" dir")

などの基本的なものを試してみると、exec()は非常にうまく機能します。

私ができること/確認/修正できることは何ですか?

役に立ちましたか?

解決 3

これが私がしたことです: バッチファイル:

  1. " php.exe my_extract_then_compress_then_ftp.php"経由でphpファイルを呼び出します
  2. rsyncを呼び出してソースフォルダーを同期します
  3. putty -l user -pw password -m file_with_ssh_commands_to_executeを呼び出します

これは魅力のように機能します。

他のヒント

これが必要かどうかはわかりませんが、通常、次のような構成を使用してマシン間でデータベースを同期します。

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

これはPHPスクリプトをローカルで実行し、スクリプトがSSH straigtを介して出力するSQLコマンドを、リモートデータベースで実行するリモートmysqlプロセスにパイプします。

圧縮が必要な場合は、SSHの-Cスイッチを使用するか、選択した圧縮プログラムの使用を次のように統合できます。

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

http://myWebserver.comにアクセスするように、Apacheで実行されているPHPからこれを実行したい/crazyScript.php そしてこれはすべて起こりますか?または、PHPでスクリプトを記述し、cmdライン経由で呼び出すだけですか?

最初の解決策が必要な場合は、これらすべてのタスクを実行するための資格情報を持つ別のユーザーでapache / issを実行してみてください。

"開発用PCで手動で実行した場合、これは完全に機能します。"。 なぜそうしないのですか?このスクリプトを実行すると、devマシン上のローカルSSHサーバーに接続していると想定します。これを行う場合、資格情報Fredを使用しているため、すべてが機能します。 PHPスクリプトを実行すると、おそらくSYSTEMとして実行されていることになります。

apacheを実行しているユーザーを変更するか、phpを使用してローカルsshに接続し、代替の資格情報を使用してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top