php 使用ssh2 操作linux、mysql(模拟阿里云控制台)

来源:互联网 发布:控制台运行java程序 编辑:程序博客网 时间:2024/05/01 13:20

通过 php 利用 ssh2扩展操作 linux、mysql 


  1、首先安装扩展

   这里是centos中的php安装ssh2扩展,记得关闭selinux和firewalld

    yum install libssh2 libssh2-devel php-devel gcc-c++(make 需要)

   下载ssh2扩展,从http://pecl.php.net/package/ssh2,有linux扩展包,也有windows的dll,如果是php5安装ssh2-0.13或0.12扩展,php7安装1.0

   笔者 的php版本是5.6 安装的扩展是ssh2-0.13

 wget  https://pecl.php.net//get/ssh2-0.13.tgz
 tar -zvxf ssh2-0.13.tgz
 cd ssh2-0.13

 
 /usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config LIBS=-ldl

make && make install

vi /etc/php.ini  或者  vi /usr/local/php/etc/php.ini

加入extension=ssh2.so

重新启动php-fpm 和 nginx

killall php-fpm

service php-fpm start 

service nginx restart

查看phpinfo


 2、利用php ssh2 代码执行程序

  代码示例:

<?php$connection = ssh2_connect('192.168.0.145', 22);ssh2_auth_password($connection, 'username', 'password');//执行linux 命令$stream = ssh2_exec($connection, '/usr/local/bin/php -i');stream_set_blocking( $stream, true );echo (stream_get_contents($stream));$stream = ssh2_exec($connection, 'ls');stream_set_blocking( $stream, true );echo (stream_get_contents($stream));?>

  实例:

 

$connection = ssh2_connect('192.168.1.176', 22);ssh2_auth_password($connection, 'root', 'rootroot');$stream = ssh2_exec($connection, 'service mysql status');stream_set_blocking( $stream, true );$res = stream_get_contents($stream);$res = trim(substr($res,strpos($res,'L')+1,strpos($res,"g")-3));

$connection = ssh2_connect('192.168.1.176', 22);ssh2_auth_password($connection, 'root', 'rootroot');$status = $_GET['status']; if($status==1){        $stream = ssh2_exec($connection, 'service mysql stop');        stream_set_blocking( $stream, true );       $res = stream_get_contents($stream);        echo $res; }else{        $stream = ssh2_exec($connection, 'service mysql start');        stream_set_blocking( $stream, true );        $res=stream_get_contents($stream);         echo $res; }


这里是密码类型登录,下面是另一种 秘钥类型登录

附录:linux ssh-keygen命令生成密钥:

其实,linux下的ssh-keygen下也可以生成密钥,在linux下输入ssh-keygen -t rsa,在提示下,输入密钥的名称(这里为key)和私钥加密密码,既完成密钥生成。生成的两个文件中,“key”为私钥,“key.pub”为公钥。如下图所示:

linux_make_public-key

cd ~/.ssh/   

清空 authorized_keys 的内容

将私钥 内容放入 authorized_keys  中

cat /mm/key.pub >> authorized_keys  


<?php$connection = ssh2_connect('192.168.1.176', 22, array('hostkey'=>'ssh-rsa'));if (ssh2_auth_pubkey_file($connection, 'root',    '/mm/key.pub',    '/mm/key')) {    echo "Public Key Authentication Successful";} else {    die('Public Key Authentication Failed');}?>

原理上是成功的 ,但是笔者测试了很多次都失败了  后来笔者又转战方法 使用xshell 来生成秘钥

ssh登录提供两种认证方式:口令(密码)认证方式和密钥认证方式。其中口令(密码)认证方式是我们最常用的一种,这里介绍密钥认证方式登录到linux/unix的方法。

使用密钥登录分为3步:
1、生成密钥(公钥与私钥);
2、放置公钥(Public Key)到服务器~/.ssh/authorized_key文件中;
3、配置ssh客户端使用密钥登录。

一、生成密钥公钥(Public key)与私钥(Private Key)

打开Xshell,在菜单栏点击“tools”,在弹出的菜单中选择“User Key Generation Wizard...”(密钥生成向导),如下图:

xshell_make_public-key-01

弹出“User Key Generation Wizard”对话框,在“Key Type”项选择“RSA”公钥加密算法,“Key Length”选择为“2048”位密钥长度,如下图:

xshell_make_public-key-02

点击“Next”,等待密钥生成:
xshell_make_public-key-03

继续下一步,在“Key Name”中输入Key的文件名称,我这里为“key”;在“Passphrase”处输入一个密码用于加密私钥,并再次输入密码确认,如下图: 这里密码可以不输入
xshell_make_public-key-04


点击“Next”,密钥生成完毕(Public key Format选择SSH2-OpenSSH格式),这里显示的是公钥,我们可以复制公钥然后再保存,也可以直接保存公钥到文件,如下图。这里点击Save as a file 保存的就是公钥匙     
xshell_make_public-key-05

点击“Save as file...”按钮,将公钥(Public key)保存到磁盘,文件名为“key.pub”,备用。

保存私钥

这里保存的才是私钥  将公私钥匙上传到 /usr/local/nginx/html/sshtest/

二、上传公钥(Public Key)到服务器:

使用到Xshell登录到服务器,进入到“/root/.ssh/”目录,运行rz命令(如果没有rz命令,运行yuminstall lrzsz安装),将key.pub发送到服务器,然后运行如下命令,将公钥(Public Key)导入到“authorized_keys”文件:

  这里可以直接使用上面的方法 不使用 rz (简单粗暴)

  1. [root@localhost ~]# cd /root/.ssh/
  2. [root@localhost .ssh]# rz
  3. rz waiting to receive.
  4. [root@localhost .ssh]# cat me.pub >> authorized_keys
  5. [root@localhost .ssh]# chmod 600 authorized_keys
  6. [root@localhost .ssh]# ls
  7. authorized_keys known_hosts me.pub
  8. [root@localhost .ssh]# cat authorized_keys
  9. ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA4VCOWFrARc1m3MfEAL50v2Z2siavO3Ijpr/LZ00EZah8EjfZhqjAc/agkljyXmNGpVDpRdtlYco8h3P5vegXOEgKcX74fDYm0vNdVABVD1XSD8ElNyLTCCNk7rZJbi3htJox3Q1n0vnMmB5d20d9occkAx4Ac94RWNS33EC5CszNTMgAIn+uZl0FlQklS1oSyWFahSTWyA6b33qG7Y5E4b6J/caObnPx6EgtBrgi97gXJHZWyYlGrpWmUuhPqs5XToRB08CVxAyzewtq1MXv0p+Po4L1pbHLRf+TSoZ5RSBZZjY4/JMAzdXHNtnAyO0j0VNGbBXKUcNSAHZ

xshell_public-key_login_upload

这时

<?php$connection = ssh2_connect('192.168.1.176', 22, array('hostkey'=>'ssh-rsa'));if (ssh2_auth_pubkey_file($connection, 'root',    '/usr/local/nginx/html/sshtest/id_rsa_1024.pub',    '/usr/local/nginx/html/sshtest/id_rsa_1024')) {    //这里没有使用密码 如果使用密码  '/usr/local/nginx/html/sshtest/id_rsa_1024','密码')) {    echo "Public Key Authentication Successful";} else {    die('Public Key Authentication Failed');}?>



秘钥连接成功! 时间原因 上面那种方法 没有发现是什么原因造成失败0.0!

相关链接:相关链接


 php中的ssh2模块学习 中有更详细的介绍。


不同服务器之间的ssh2文件的上传和下载  

ssh2封装类

文件上传和下载

0 0
原创粉丝点击