php ssh2实现远程上传、下载、执行命令
在命令型领导下,领导者提供明确的指示和任务,员工执行并接受命令。 #生活技巧# #领导力技巧# #情境领导理论#
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 installUbuntu下可以直接安装:
apt-get install libssh2-1-dev libssh2-php使用直接安装方式,不需要修改php配置信息。
PS:
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);ssh2_exec() 是会有返回值的,而它的返回值是无格式的(无换行),但它是以stream(流的形式返回),
显示出来,可这样进行流处理:
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"; $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 ssh2 scp问题解决
<?php
$connection = ssh2_connect('192.168.1.XX', 22);
$res=ssh2_auth_password($connection, 'root', 'XXX');
$re= ssh2_scp_recv($connection, '/home/test1.php', '/var/www/html/test1.php');
var_dump($res);
var_dump($re);
实验来无数次,ssh2_scp_send成功。recv失败,折腾了一整天,最后搞个两台机器间的密钥认证就解决了
原因应该就是recv时,需要本地机器的密码吧,所以没密钥认证前一直recv失败
网址:php ssh2实现远程上传、下载、执行命令 https://www.yuejiaxmz.com/news/view/770929
相关内容
php的declare命令如何使用?PHP代码执行函数总结(可以用于制作一句话木马)
【php毕业设计】基于php+mysql+apache的二手物品交易网站设计与实现(毕业论文+程序源码)——二手物品交易网站
设Var=HOME,以下4个命令中,执行结果相同的两个命令是
php添加openssl扩展
Runner H:通过自然语言命令实现网页自动化执行任务(申请内测)
通过php://filter/read=convert.base64
无需付费即可实现远程操作,这十款软件值得尝试
揭秘PHP后门陷阱:黑客如何隐藏恶意代码,你中招了吗?防患未然,一文读懂安全防护之道
什么是php?php是什么?