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的更多相关文章

  1. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  2. 04: python常用模块

    目录: 1.1 时间模块time() 与 datetime() 1.2 random()模块 1.3 os模块 1.4 sys模块 1.5 tarfile用于将文件夹归档成 .tar的文件 1.6 s ...

  3. 一次针对多台服务器交互式主机命令采集Python脚本编写

    [环境介绍]   系统环境:Linux + Python 2.7.10(监控主机)   [背景描述] 需求:每次节假日或者重要时间时,需要对数据库主机信息进行检查,比如主机空间使用率之类.有时候需要执 ...

  4. Python 【基础常识概念】

    深浅拷贝 浅copy与deepcopy 浅copy: 不管多么复杂的数据结构,浅拷贝都只会copy一层 deepcopy : 深拷贝会完全复制原变量相关的所有数据,在内存中生成一套完全一样的内容,我们 ...

  5. Python 【基础面试题】

    前言 面试题仅做学习参考,学习者阅后也要用心钻研其中的原理,重要知识需要系统学习.透彻学习,形成自己的知识链.以下五点建议希望对您有帮助,早日拿到一份心仪的offer. 做好细节工作,细致的人运气不会 ...

  6. python远程连接paramiko 模块和堡垒机实现

    paramiko使用 paramiko模块是基于python实现了SSH2远程安全连接,支持认证和密钥方式,可以实现远程连接.命令执行.文件传输.中间SSH代理功能 安装 pip install pa ...

  7. 利用paramiko模块实现堡垒机+审计功能

    paramiko模块是一个远程连接服务器,全真模拟ssh2协议的python模块,借助paramiko源码包中的demos目录下:demo.py和interactive.py两个模块实现简单的堡垒机+ ...

  8. 在Windows和Linux上安装paramiko模块以及easy_install的安装方法

    一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...

  9. python中paramiko模块的使用

    paramiko是python一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接1.可以远程操作服务器文件 例如: df:查看磁盘使用情况 mkdir:创建目录 mv/cp/mk ...

  10. python安装paramiko模块

    一.简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支 ...

随机推荐

  1. 使用 Helm 在 Kubernetes 上安装 Consul

    Consul Sync 部署 官方文档部署:https://developer.hashicorp.com/consul/docs/k8s/installation/install 部署版本 1.14 ...

  2. HTML & CSS – 实战 RWD Image 响应式图片

    前言 之前写过 HTML & CSS – Responsive Image 响应式图片 (完整版), 里面解释了原理和一些具体做法, 但是并不是以真实场景作为例子带入. 由于 RWD Imag ...

  3. EF Core – Soft Delete 实现

    前言 在 SQL Server – Soft Delete 中, 讲到了如果在 SQL Server 实现 Soft Delete. 这篇来说说, EF Core 在中间扮演的角色. 主要参考 Ent ...

  4. Dubbo框架的1个核心设计点

    Java领域要说让我最服气的RPC框架当属Dubbo,原因有许多,但是最吸引我的还是它把远程调用这个事情设计得很有艺术. 1.Dubbo优点较多,我只钟情其一 1.1.优点 业内对于微服务之间调用的框 ...

  5. MySQL事务理论及实现

    理论大多引自<高性能MySQL>一书,不过在自测的过程中不知道是不是SQL版本的问题,还是操作有问题,在设置事务隔离级别的时候 按书上讲SET TRANSACTION ISOLATION ...

  6. USB协议详解第2讲(协议核心学习要点)

    USB协议详解第2讲(协议核心学习要点) 看了这么多概念,想必大家会问"我要学会USB协议,并且会编程,我具体要学习那些有关的内容?",这一篇我们将会讲解在学习USB协议中务必要掌 ...

  7. .Net 反射和特性

    学习:.net 反射简单介绍 - WebEnh - 博客园 (cnblogs.com) 反射就是通过反射程序集从而获取相关信息 十月的韩流 使用了特性就必定会使用反射 var res = obj.Ge ...

  8. C#的 ArrayList集合 和 List 集合

    // 集合 & 字典的初识 // 集合的使用 // 集合与数组比较类似,都用于存放一组值 // 数组的优劣势分析 // 1. 优势:数组在内存中是连续存储的,所以他的索引速度非常的快,而且赋值 ...

  9. C# 的布尔类型和字符串类型(模板字符串)

    // 布尔类型 boll bool b = false; b = 1 == 1; // true bool b1 = 1 > 23; // false // 值类型 : 在代码中初始化类型的时候 ...

  10. text-align的对齐方式

    text-align的6种取值 left:左对齐 right:右对齐 center:居中 start:如果内容方向是左至右,则等于left,反之则为right. end:如果内容方向是左至右,则等于r ...