澄清一下:
我有两个服务器,A和B A是一个具有php exec但没有ssh客户端的Web主机 B是Amazon EC2,我拥有完全的root访问权限,但没有配置Web服务器
是否有一种方法可以使用A服务器上的php脚本调用B服务器上的bash脚本?
编辑:我确认Web服务器上没有ssh。
一种可能的方法是在服务器B上创建一个守护进程,然后检查mysql(或其他数据库)中更新的表,并在行存在时运行bash脚本,同时您只需向远程数据库添加一行命令以执行bash脚本,例如:
服务器B每隔一分钟左右检查更新的“命令”数据库,以获取要运行的新脚本和参数等。
服务器A将命令添加到远程(或本地)数据库中,以运行bash脚本“/home/mybashscript etc1 etc2”
由于服务器B不断检查新命令,因此它会自动运行bash脚本。
exec("ssh username@server command -arg1 -arg2 ...");
。您需要确保为无密码登录设置了身份验证密钥。PHP服务器上需要一个ssh客户端和远程机器上的ssh服务器。如果需要安装ssh客户端部分,您应该能够在没有root访问权限的情况下进行安装,但它在许多系统上是标准的。如果只能通过SSH访问B服务器,而您在B服务器上没有任何SSH客户端,那么您将完全无法做其他事情,除了观察AMI实例的计费计数器不断增加。
SERVER A <<-------- SSH ------->> SERVER B
或者:
您可以通过PHP AWS API进行访问。可能会直接访问到您的AMI。
SERVER A <<-------- PHP AWS Toolkit ------->> SERVER B
只需使用一些远程执行工具。您可能已在服务器B上安装了Python。您可以非常容易地在Python中创建一个简单的XMLRPC服务器,只需要大约20行代码。
http://code.activestate.com/recipes/81549-a-simple-xml-rpc-server/
您只需确保使用摘要身份验证或其他安全措施来保护它,也可以考虑额外的SSL。
PHP有一个SSH库,但如果您的Web服务器上甚至没有安装SSH客户端,我认为您将无法使用该库-但您应该检查一下。
如果没有-正如您所说,服务器A上没有SSH客户端-因此您无法建立与服务器B的SSH连接。
但是您还说您完全拥有服务器B的root访问权限-那么为什么不在服务器B上设置一个Web服务器呢?
然后,您可以在服务器A上执行一个PHP脚本,该脚本向服务器B发出HTTP请求并执行一个PHP脚本,然后启动您的bash脚本。您可以通过HTTPS来保护调用,并通过PHP进行额外的加密。