您的位置:首页 > 运维架构 > Linux

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

2017-02-06 19:37 781 查看
通过 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”为公钥。如下图所示:



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...”(密钥生成向导),如下图:



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



点击“Next”,等待密钥生成:



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



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



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

保存私钥



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

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

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

[root@localhost ~]# cd /root/.ssh/
[root@localhost .ssh]# rz
rz waiting to receive.
[root@localhost .ssh]# cat me.pub >> authorized_keys
[root@localhost .ssh]# chmod 600 authorized_keys
[root@localhost .ssh]# ls
authorized_keys known_hosts me.pub
[root@localhost .ssh]# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA4VCOWFrARc1m3MfEAL50v2Z2siavO3Ijpr/LZ00EZah8EjfZhqjAc/agkljyXmNGpVDpRdtlYco8h3P5vegXOEgKcX74fDYm0vNdVABVD1XSD8ElNyLTCCNk7rZJbi3htJox3Q1n0vnMmB5d20d9occkAx4Ac94RWNS33EC5CszNTMgAIn+uZl0FlQklS1oSyWFahSTWyA6b33qG7Y5E4b6J/caObnPx6EgtBrgi97gXJHZWyYlGrpWmUuhPqs5XToRB08CVxAyzewtq1MXv0p+Po4L1pbHLRf+TSoZ5RSBZZjY4/JMAzdXHNtnAyO0j0VNGbBXKUcNSAHZ



这时

<?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封装类

文件上传和下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: