PHP模块之ssh2
php远程copy文件以及在远程服务器中执行命令时,所用到的模块是ssh2,以后所有的操作都依据ssh2连接句柄完成。
libssh: https://www.libssh2.org/
ssh2: https://pecl.php.net/package/ssh2
[安装]
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 https://pecl.php.net/get/ssh2-1.1.2.tgz
cd ssh2-0.11.3
phpize
./configure —with-ssh2 && make && make install
ubuntu安装:
apt-get install libssh2-1-dev libssh2-php 会直接安装, 不需要修改PHP配置信息
[修改配置文件]
cd /etc/php5/cli
vim php.ini
添加项:extension=/usr/lib/php5/20090626/ssh2.so
ssh2.so是编译ssh2时得到的模块,上面是模块的位置。
查看是否加载了ssh2
php -m|grep ssh2
ssh2
[使用]
SSH2连接有两种方式,分别是用户名密码,ssh密钥形式。
1.用户名和密码
$connection = ssh2_connect("192.168.6.222",22);
if (ssh2_auth_password($connection,"veno","ubuntu"))
{
echo "Authentication Successful! ";
}else{
die("Authentication Failed...");
}
2.ssh密钥
v$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');
}
密钥生成方式:
ssh-keygen -t rsa 生成后的公钥: ~/.ssh/id_rsa.pub 然后使用ssh-copy-id的方式添加到需要免密登录的服务器上
3.远程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');
4.执行远程服务器上的命令并取返回值
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);
DEMO:
<?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模块之ssh2的更多相关文章
- Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块
Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fab ...
- 04: python常用模块
目录: 1.1 时间模块time() 与 datetime() 1.2 random()模块 1.3 os模块 1.4 sys模块 1.5 tarfile用于将文件夹归档成 .tar的文件 1.6 s ...
- 一次针对多台服务器交互式主机命令采集Python脚本编写
[环境介绍] 系统环境:Linux + Python 2.7.10(监控主机) [背景描述] 需求:每次节假日或者重要时间时,需要对数据库主机信息进行检查,比如主机空间使用率之类.有时候需要执 ...
- Python 【基础常识概念】
深浅拷贝 浅copy与deepcopy 浅copy: 不管多么复杂的数据结构,浅拷贝都只会copy一层 deepcopy : 深拷贝会完全复制原变量相关的所有数据,在内存中生成一套完全一样的内容,我们 ...
- Python 【基础面试题】
前言 面试题仅做学习参考,学习者阅后也要用心钻研其中的原理,重要知识需要系统学习.透彻学习,形成自己的知识链.以下五点建议希望对您有帮助,早日拿到一份心仪的offer. 做好细节工作,细致的人运气不会 ...
- python远程连接paramiko 模块和堡垒机实现
paramiko使用 paramiko模块是基于python实现了SSH2远程安全连接,支持认证和密钥方式,可以实现远程连接.命令执行.文件传输.中间SSH代理功能 安装 pip install pa ...
- 利用paramiko模块实现堡垒机+审计功能
paramiko模块是一个远程连接服务器,全真模拟ssh2协议的python模块,借助paramiko源码包中的demos目录下:demo.py和interactive.py两个模块实现简单的堡垒机+ ...
- 在Windows和Linux上安装paramiko模块以及easy_install的安装方法
一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...
- python中paramiko模块的使用
paramiko是python一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接1.可以远程操作服务器文件 例如: df:查看磁盘使用情况 mkdir:创建目录 mv/cp/mk ...
- python安装paramiko模块
一.简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支 ...
随机推荐
- android 反编译APK取源代码。
坑,自己写的Android APK 程序,发现线上版本是 1.9.4 ,本地的代码版本却是 1.9.1.不知道到底怎么回事,svn里面也没有日志记录.....只能从线上apk反编译来看看了,幸好这个升 ...
- attention, transformers
这啥呀,慢慢啃 Attention 最初来源于 NLP 机器翻译的 Sequence to Sequence 模型,早先的encoder-decoder结构随着句子长度增加翻译性能会下降,因为模型记不 ...
- ASP.NET Core Library – Excel 读写
前言 以前写过 EPPlus 的笔记, 但后来 EPPlus 开始收费了.... (这好像是 .NET 生态的宿命) 在找替代方案中看中了微软的 Open XML SDK. 但经过一番折腾, 它确实太 ...
- Flutter 2.8 正式发布
文/ Tim Sneath,Flutter & Dart 产品经理 Flutter 已经更新到 2.8 正式版,发布了多项新特性和改进以不断改善移动和 Web 端的开发体验,同时也正在将桌面端 ...
- 《Vue.js 设计与实现》读书笔记 - 第13章、异步组件与函数式组件
第13章.异步组件与函数式组件 13.1 异步组件要解决的问题 用户可以简单通过 import 异步导入组件. <template> <component :is="asy ...
- Android Qcom USB Driver学习(一)
该系列文章总目录链接与各部分简介: Android Qcom USB Driver学习(零) USB接口类型 Android终端上常用的USB接口:TypeC(现在的主流),MicroB(以前的设备) ...
- C# 新语法 switch 的简单写法
// C# 中的新语法 switch 的简写 string str = "123"; string res = str switch { "1" => & ...
- 说一下tcp三次握手
1. 客户端发送syn请求连接 : 2. 服务器检验syn,然后发送syn和ack确认连接: 3. 客户端接收ack和syn,然后发送ack建立连接 :
- 2024csp初赛总结
浙江27日下午1:30出分了,j组97,s组61.5,和估分一模一样,还好没有挂分.然后3点的时候上洛谷看了一下,全国分数线出了,j组89分,s组56分.那应该都过了,随后同学的成绩也出来了,sjx, ...
- 6.flask 源码解析:响应
目录 一.flask 源码解析:响应 1.1 response 简介 1.2 flask 响应(response) 1.3 werkzeug response 1.4 自定义 response Fla ...