php ssh扩展 远程复制文件和远程执行代码
来源:互联网 发布:软件项目实施进度表 编辑:程序博客网 时间:2024/06/06 19:44
php远程copy以及执行命令
php远程copy文件以及在远程服务器中执行命令时,所用到的模块是ssh2,以后所有的操作都依据ssh2连接句柄完成。
1. SSH2模块的安装
1.1 安装需要的扩展包
- wget http://www.libssh2.org/download/libssh2-1.4.2.tar.gz
- tar zxf libssh2-1.4.2.tar.gz
- cd libssh2-1.4.2
- ./configure && make && make install
- wget http://pecl.php.net/get/ssh2-0.11.3.tgz
- cd ssh2-0.11.3
- phpize (如果报错命令没有找到,apt-get install php5-dev)
- ./configure —with-ssh2 && make && make install
Ubuntu下可以直接安装:
apt-get install libssh2-1-dev libssh2-php
1.登入远程主机:
localhost$ ssh -l jsmith remotehost
2.已连接远程主机:
remotehost$
3.要临时回到本地主机,输入退出符号:“~”与“Control-Z”组合。
当你输入“~”你不会立即在屏幕上看到,当你按下<Control-Z>并且按回车之后才一起显示。如下,在远程主机中以此输入“~<Control-Z>”
1.2 修改php配置信息
- cd /etc/php5/cgi
- vim php.ini
- 添加项:extension=/usr/lib/php5/20090626/ssh2.so
- ssh2.so是编译ssh2时得到的模块,上面是模块的位置。
- cd /etc/php5/cli
- vim php.ini
- 添加项:extension=/usr/lib/php5/20090626/ssh2.so
- ssh2.so是编译ssh2时得到的模块,上面是模块的位置。
1.3 重启web服务器
- /etc/init.d/lighttpd restart
1.4 查看是否加载了ssh2
- [root@localhost ~]php -m | grep ssh2
- ssh2
2. SSH2模块的连接应用
SSH2连接有两种方式,分别是用户名密码,ssh密钥形式。
2.1 用户名与密码
- $connection = ssh2_connect("192.168.6.222",22);
- if (ssh2_auth_password($connection,"veno","ubuntu"))
- {
- echo "Authentication Successful! ";
- }else{
- die("Authentication Failed...");
- }
2.2 ssh密钥
- $connection = ssh2_connect('192.168.6.222', 22, array('hostkey'=>'ssh-rsa'));
- if (ssh2_auth_pubkey_file($connection, 'root',
- '/root/.ssh/id_rsa.pub',
- '/root/.ssh/id_rsa'))
- {
- echo "Public Key Authentication Successful\n";
- } else {
- echo ('Public Key Authentication Failed');
- }
Ps: 密钥生成:
在服务器192.168.6.229上面以root登录
- #ssh-keygen
有什么提问基本上回车即可
后成的公钥在~/.ssh/id_rsa.pub
如果想在229通过密钥验证登录到222上面,则把229的公钥id_rsa.pub cp到222上面,先手动登录root,然后运行:
- cat id_rsa.pub >> ~/.ssh/authorized_keys
这样就可以在229上面ssh 192.168.6.229不需要输入密码即可登录到222。上面php代码在229上面也可以通过验证。
3. SSH2模块的具体应用
通过SSH2验证通过后,得到的连接符为$connection
3.1 实现远程copy文件
远程服务器文件copy到本地:
bool ssh2_scp_recv ( resource $session, string $remote_file, string $local_file )
Ps: 接收文件时,后面文件名可以为空,如:
- ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/')
本地文件copy到远程服务器
bool ssh2_scp_send ( resource $session, string $local_file, string $remote_file [, int $create_mode] )
Ps:发送文件时,后面的文件名不能为空,如:
- ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');
3.2 执行远程服务器上的命令并取返回值
resource ssh2_exec( resource $session, string $command [, string $pty [, array $env [, int $width [, int $height [, int $width_height_type]]]]] )
在229上面执行222上的命令具体实例:
- $tcmd="cd /home/veno/gateway/radiusclient;";
- $tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
- $stream = ssh2_exec($connection, $tcmd);
- stream_set_blocking($stream,true);
- echo stream_get_contents($stream);
附件:测试中应用到的php代码
- <?php
- echo "是访问到这里来了";
- $connection = ssh2_connect('192.168.6.222', 22, array('hostkey'=>'ssh-rsa'));
- if (ssh2_auth_pubkey_file($connection, 'root',
- '/root/.ssh/id_rsa.pub',
- '/root/.ssh/id_rsa'))
- {
- echo "Public Key Authentication Successful\n";
- //$flag=ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/');
- //接收时,后面文件名可以为空
- //$flag=ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');
- //发送时,后面的文件名不能为空
- //echo $flag;
- $tcmd="cd /home/veno/gateway/radiusclient;";
- $tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
- $stream = ssh2_exec($connection, $tcmd);
- stream_set_blocking($stream,true);
- echo stream_get_contents($stream);
- } else {
- echo ('Public Key Authentication Failed');
- }
- echo "<br/>";
- $connection = ssh2_connect('192.168.6.222', 22);
- ssh2_auth_password($connection, 'veno', '*******');
- $tcmd="cd /home/veno/gateway/radiusclient;";
- $tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";
- $stream = ssh2_exec($connection, $tcmd);
- echo "<br/>";
- echo "-----------------------------------------------";
- stream_set_blocking($stream,true);
- echo stream_get_contents($stream);
- echo "-----------------------------------------------";
- echo "<br/>";
- php ssh扩展 远程复制文件和远程执行代码
- SSH远程登陆主机和SCP远程文件复制
- ssh免密登录和远程文件复制
- PHP 执行远程文件 curl
- 关于SSH远程登录和远程连续执行代码的一些问题
- 从本地和远程复制文件java 代码
- ssh 远程执行命令
- ssh远程执行脚本
- ssh远程执行命令
- ssh 远程执行脚本
- ssh 执行远程操作
- ssh 远程执行命令
- SSH 远程执行任务
- SSH 远程执行任务
- SSH 远程执行任务
- ssh远程执行 测试
- php cgi-wrap远程代码执行漏洞
- php cgi远程任意代码执行漏洞
- hdu-1272
- 魔兽争霸war3心得体会(二):狗转蜘蛛,DK光环+游侠二发
- ubuntu下不错的源
- id、name、class的区别
- 项目管理必备—禅道项目管理系统开源版本的部署及配置
- php ssh扩展 远程复制文件和远程执行代码
- 在Ubuntu下安装PHP的ssh2扩展
- Word技巧篇之自动生成文档目录
- 当你真正感觉到痛,你才知道痛是什么——ACM退役贴
- 一些常见的重置密码漏洞分析整理
- 第8周项目4-个人所得税计算器
- IndexWriter的初始化
- Java 多线程多任务循环运行
- 本月有几天