2009-10-30 171 views
2

我的目标是: 我有一台Windows XP个人电脑,其中包含所有源代码和开发数据库。 我们称之为“pc.dev.XP”。 我有一台运行Linux的目标计算机。我们称之为“pc.demo.Linux”。 这里就是我的“pc.dev.XP”完成(只是让你获得上下文):Php:从Windows运行ssh登录到Linux并运行脚本

  • 安装的所有cygwin的东西
  • 创建一个有效的RSA密钥,并把它放在DEST 备份计算机,以便SSH不 询问密码
  • rsync的工作得很好,这种方式

如果我试图通过命令行来做到这一点的“pc.dev.XP”:

cd \cygwin\bin 
ssh [email protected] "cd /var/www && ls -al" 

这工作完全没有问密码 现在,这里就是我想要做的“pc.dev.XP”:

  • 推出PHP脚本,提取开发。数据库为SQL文件
  • 压缩这个文件
  • 通过ftp把它转移到了“pc.demo.Linux”
  • 日志以“pc.demo.Linux”和执行“解压那么MySQL -e”源解压文件”

,如果我上运行 “pc.dev.XP” 手动:

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

这工作完全 同样为:

cd \cygwin\bin 
ssh [email protected] "cd /var/www && ls -al" 

如果我尝试exec()在php(wamp安装在“pc.dev.XP”)这些脚本挂起。我很确定这是因为用户是“SYSTEM”而不是“Fred”,并且putty或ssh要求输入密码,但也许我错了。

无论如何,我正在寻找一种方法来自动完成我描述的这4个任务,并且因为exec()挂起而卡住了。 safe_exec_mode或safe_exec_dir指令没有问题,它们在开发机器上被禁用,因此如果我尝试一些基本的东西,如exec(“dir”),exec()工作得非常好。

任何想法我可以做/检查/正确吗?

+0

为什么不使用批处理文件呢?更无忧无虑,不需要PHP。 – 2009-10-30 12:42:10

回答

0

这里就是我所做的: 的批处理文件:

  1. 通过 “php.exe的my_extract_then_compress_then_ftp.php”
  2. 称为rsync到源文件夹同步调用PHP文件
  3. 打电话putty -l用户-pw密码-m file_with_ssh_commands_to_execute

它就像一个魅力。

0

你想从Apache下运行PHP,如我去http://myWebserver.com/crazyScript.php,这一切发生?或者你只是想在PHP中编写脚本并通过cmd行调用它们?

如果您想要第一个解决方案,请尝试在具有凭据的其他用户下运行您的apache/iss以执行所有这些任务。

“如果我手动运行在开发PC上,这个功能完美无缺。” 为什么不这样做呢?当您运行该脚本时,我假设您正在连接到开发机器上的本地SSH服务器。当你这样做时,你使用的是凭据Fred,所以一切正常。当你运行PHP脚本时,你是对的,它可能是以SYSTEM身份运行的。

尝试更改apache运行的用户或使用php连接到本地ssh,从而使用备用凭据。

+0

我想“去http://myWebserver.com/crazyScript.php”,所有这一切发生......但你让我想......创建一个批处理CMD/DOS文件,将称为“php.exe myscript。 php“然后调用”ssh.exe [有很好的参数]“ ”使用PHP连接到本地ssh,从而使用替代凭据“这也许是我应该做的......但从技术上讲,怎么样? – 2009-10-30 13:51:21

1

我不知道这是否是你所需要的,但我通常使用这样的结构在计算机之间同步数据库:

php extractFromDb.php | ssh [email protected] "mysql remoteDatabaseName" 

这本地执行PHP脚本,并管道SQL命令脚本通过SSH straigt打印出远程数据库中执行它们的远程mysql进程。

如果你需要压缩,您可以使用SSH的-C开关,或集成像这样使用你选择的压缩方案:

php extractFromDb.php | gzip -9 | ssh [email protected] "gunzip | mysql remoteDatabaseName" 
+0

这似乎是一个非常好的主意,我会在星期一检查一下,谢谢 – 2009-10-30 15:51:51