如何通过php连接远程主机并操作

系统:均为centos5(linux)
本机:192.168.0.76
远程机:192.168.0.77
本意:是想要使76这台机器作为”监控机“,监控其他机器,所以在76机器上就要能通过php连接其他机器,并查看设计者需要的诸如”df -h“命令的返回信息。
php的函数大部分都是查看”本机“的。比如,通过web访问了76机器上的php(该php有如下语句:$results = passthru('df -h'); ),返回的是76机器的系统资源概况。
目的:我想要访问76上的某php,然后得到77机器的系统资源概况
有过的想法:
访问76机器上的php文件,试过:
1:
passthru('ssh [email protected]',$returnval);
然后继续加入:$results = passthru('df -h');
事实证明了我太天真了。。我后来的理解是php一个语句结束就返回了本机环境,所以直接输入查询命令,得到的当然是本机的信息
2:
想过popen函数,
$result3 = popen("ssh [email protected]","r");打开一个完整进程,然后输入命令,结果还是不行。得到的资源信息仍然是76机器的。
我感觉想法2的思路还是有点靠谱的,就是缺点关键的东西,才能实现我想要的功能。

综上是偶的想法,大侠们明白我想要的东西了吧。。
偶最想要的就是得到类似的东西:
$result = popen("ssh [email protected]","r");//打开了远程连接77机器的进程
接着是尽情的操作命令,都是在77机器上进行的,比如发送了df -h ,得到的是77的信息
$results2 = passthru('df -h');//通过它来发送是不行的
两台机器做了密钥交换,所以可以直接ssh连接不用输入密码
偶想知道的就是,如何才能远程连接了77机器,然后通过什么函数(及什么格式),发送了查看命令得到的是77机器的信息。。

感谢了。。。老规矩,得到满意答案以后追加150分。。。
1楼的兄弟。ssh我当然安装了。我的提问是
1如何使用php来完成远程连接其他主机
2并且在php中通过怎样的操作步骤达到对远程主机发送查看系统信息命令
3并返回想要的信息结果
的目的。在76这台机器中连接远程主机。我已经掌握了。我要的是php环境下的操作。

一、最佳方案是在77机器上安装apache和php

二、可以通过管道控制使用telnet登录77号机执行命令并获取结果,ssh连接本人没有做过,telnet方法如下:

$f=fopen("telnet://192.168.0.77","rw");

$s=fgets($fp);
fputs($fp,"root");

$s=fgets($fp);
fputs($fp,"pass");

$s=fgets($fp);
fputs($fp,"df -h");

while(!feof($fp)){
$fp=fgets($fp);
echo $s;
}

fclose($fp);

手机输入真累~~~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-08
打开php exec函数,写一个在线操作入口即可。就是不大安全。追问

不太明白,能告诉我怎么写么?就是这个“在线操作入口”。
汗一个,我只知道 exec("command",$data); 能具体告诉我 在线操作入口应该在括号里填写什么么?

第2个回答  2011-04-08
启动:

service sshd start

安装过程:

1.以root身份登入系统(没登入系统和没有足够的权限都不能安装,晕,这不是废话)
2.检查安装系统时是否已经安装SSH服务端软件包:
rpm -qa|grep openssh
若显示结果中包含openssh-server-*,则说明已经安装,直接启动
sshd服务就可以了(service sshd start).(其中*的内容是该包的版本,一般为3.5p1-6)
若无任何显示,或显示中不包含openssh-server-*则说明没有安装SSH服务端软件包, 进入第3步
3.找到redhat 9.0 安装光盘,放入光驱中并加载光驱
mount -t iso9660 /dev/cdrom /mnt/cdrom (加载光驱命令)
4.查找光驱中的SSH服务端软件所在目录,一般在/mnt/cdrom/RedHat/RPMS/目录下,
可以先cd到该目录下再用ls查看,如:ls openssh*,然后根据上面具体显示直接安装
rpm -ivh openssh-3.5p1-6 (如果第二步中显示已经安装该包就不要安装)
rpm -ivh oeenssh-server-3.5p1-6
5.启动sshd服务 /etc/rc.d/init.d/sshd start
6.在windows 下用putty等SSH客户端软件连接测试,或直接在linux主机上输入
ssh username@localhost 测试,但必须要先安装linux 下的SSH客户端软件包,即
openssh-clients-*,安装过程和上面的服务端包相同
7.若能成功远程登入,则说明SSH服务安装配置成功,
否则很可能就是你的防火墙阻止连接了,重新配置防火墙或干脆先停掉防火墙
(/etc/rc.d/init.d/iptables stop) 就可以连接了

本篇文章来源于:开发学院 原文链接: