Php:运行ssh从窗户登录到Linux和运行一个脚本
题
这是我的目标:我有Windows XP电脑的所有源代码和发展数据库。让我们叫它"电脑。开发。XP".我有一个目的地的计算机,运行Linux。让我们叫它"电脑。演示。Linux"。这是我做了什么关于"电脑。开发。XP"(只是让你得到的上下文):
- 安装的所有cygwin的东西
- 创建一个有效的rsa密钥和把它的目标 备份的计算机,以便ssh不 要求一个密码
- 可以工作得很好这种方式
如果我尝试这样做的"电脑。开发。XP"通过命令行:
cd \cygwin\bin
ssh Fred@pc.demo.Linux "cd /var/www && ls -al"
这个完美的作品,而不要求一个密码 现在,这里就是我想要做的"电脑。开发。XP":
- 启动一个php script提取的开发。数据库入sql文件
- zip这个文件
- 转让通过ftp的"电脑。演示。Linux"
- 登录到的"电脑。演示。Linux"和执行"解压然后mysql-e"源解压缩的文件"
如果我运行关于"电脑。开发。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"
如果我尝试exec()in php(*瓦姆普的办公室安装在"电脑。开发。XP")这些脚本,他们挂起。我敢肯定这是因为用户"系统"而不是"Fred",并腻子或ssh要求一个密码,但也许我是错误的。
无论如何我在寻找一种方法自动执行的那些4个任务我已经描述了我坚持因为exec()挂起。有没有问题safe_exec_mode或safe_exec_dir指令,他们是残疾人在开发计算机,因此exec()工作得很好如果我尝试一些基本的东西,如exec("迪尔")
任何想法什么我可以做/检查/否正确?
解决方案 3
这是我做了什么:一批文件:
- 呼叫php文件通过"php.exe my_extract_then_compress_then_ftp.php"
- 电话可以同步的源文件夹
- 调用的油灰-我用户pw密码-m file_with_ssh_commands_to_execute
它就像一个特色。
其他提示
我不知道如果这是你需要什么,但我通常使用的一个构造这样的数据库的同步跨越的机器:
php extractFromDb.php | ssh user@remote.com "mysql remoteDatabaseName"
这个执行PHP script当地和水管SQL命令脚本打印出通过SSH straigt入远程mysql过程,执行它们在远程数据库。
如果你需要压缩,既可以使用SSH的-C开关、或将使用压缩方案的选择,这样的:
php extractFromDb.php | gzip -9 | ssh user@remote.com "gunzip | mysql remoteDatabaseName"
你想这样做,从PHP下运行的阿帕奇,因为在我去 http://myWebserver.com/crazyScript.php 而这一切发生?或者你只是想要写你的脚本中PHP和调用它们通过cmd线?
如果你想第一个解决方案,尝试运行apache/国际空间站的下一个不同的用户有凭据来执行所有这些任务。
"如果我跑在开发的电脑手这个完美的作品。".为什么不做这样的吗?当你碰那个剧本,我想你在接连接到当地SSH服务器上的开发机。当你做这个,你正在使用的凭证,弗莱德,这么一切正常工作。当你run PHP script的,你是正确的,这可能是运行为的系统。
尝试改变用户apache运行为,或者使用php连接到当地ssh从而使用其他凭据。