PHP ssh2实现远程执行操作
来源:互联网 发布:淘宝追加评论怎么找 编辑:程序博客网 时间:2024/06/15 02:59
背景
在Python中做远程SSH操作是很方便的,有很多的模块如paramiko、fabric,甚至是ansible、salt,但目前公司使用PHP来开发监控,实现基于logstash的日志监控,需要对客户端进行一些shell操作,初次实现时使用PHP调用python脚本的方法实现logstash的初始化和状态验证,但一直不太稳定,而且这种方式很蹩脚,让人很不爽,所以找时间研究了一下PHP中的ssh远程执行命令的方法,发现有类似paramiko的ssh2扩展可以使用。
安装
PHP扩展安装有三种主要方法:编译安装、pecl、composer
分别对应python中的编译安装、easy_install、pip,但总体的体验来说,composer比pip还是差不少,必须吐槽一下
具体安装方法参考:安装php ssh2扩展
使用演示
1. 新建ssh2连接
$conn = ssh2_connect($ip,$port); //初始化连接$pubkey = APP_PATH . 'public/shell/pub_key'; //这里的公钥对不是必须为当前用户的$prikey = APP_PATH . 'public/shell/pri_key';$res = ssh2_auth_pubkey_file($conn, $user, $pubkey, $prikey); //基于rsa秘钥进行验证 //如果使用密码需要使用另一个人函数ssh2_auth_password
2. 执行shell命令
$stream = ssh2_exec($conn, 'service logstash status'); //执行结果以流的形式返回$dio_stream = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); //获得标准输入输出留$err_stream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR); //获得错误输出留stream_set_blocking($err_stream, true);stream_set_blocking($dio_stream, true);$result_err = stream_get_contents($err_stream); $result_dio = stream_get_contents($dio_stream); //获取流的内容,即命令的返回内容fclose($stream);
3. 远程传输文件
$filename = 'logstash-' . $id . '.conf';$src = APP_PATH . 'public/logconfig/' . $filename; //本地文件$dst = '/etc/logstash/conf.d/' . $filename; //远程目录地址if (file_exists($src)) { $flag = ssh2_scp_send($conn, $src, $dst, 0644); //默认权限为0644,返回为bool if ($flag) { ...... }}
4. 其它相关功能
除了上述演示的几个核心功能外,ssh2扩展也可以实现sftp、交互式shell、tunnel等功能,详细请参考PHP在线手册
0 0
- PHP ssh2实现远程执行操作
- php ssh2实现远程上传、下载、执行命令
- php远程操作linux,ssh2
- php的ssh2扩展实现远程控制
- 纯JAVA实现远程执行SSH2主机的SHELL命令
- JAVA实现远程执行SSH2主机的SHELL命令
- php实现远程操作
- java中使用JSCH包,SFTP及SSH2文件操作及远程命令执行
- java中使用JSCH包,SFTP及SSH2文件操作及远程命令执行(改进)
- java远程调用ssh2执行Linux命令
- JSch:纯JAVA实现远程执行SSH2主机的SHELL命令
- JSch:纯JAVA实现远程执行SSH2主机的SHELL命令
- JSch:纯JAVA实现远程执行SSH2主机的SHELL命令
- JSch:纯JAVA实现远程执行SSH2主机的SHELL命令
- java使用ssh2操作远程linux机器
- 使用ssh2 执行远程机器命令 获取执行结果
- Java通过SSH2协议执行远程Shell脚本
- Java通过SSH2协议执行远程Shell脚本
- 记一次Nginx+uWsgi+flask部署配置
- winform窗体简易打砖块儿
- nodejs+npm+gulp使用入门教程
- SimpleAdapter实例
- 全局变量只能初始化不能赋值
- PHP ssh2实现远程执行操作
- lua setmetatable __index __newindex
- 【NOIP2016提高A组模拟9.9】运输妹子
- SCU2016-02 I题 (反转技巧)
- 如何逐层建立一棵满二叉树?
- Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
- Logstash的一次问题排查
- 渲染世界的OpenGL<8> 基础纹理
- 【NOIP2012模拟10.26】雕塑