php實(shí)現(xiàn)ssh遠(yuǎn)程連接服務(wù)器并操作服務(wù)器, 需要用到php_ssh擴(kuò)展包
安裝
解決依賴關(guān)系如下:PECL/ssh2 –> libssh2 –> openssl
- 下載libssh2和ssh2, 地址分別為:
http://www.libssh2.org/download/
http://pecl.php.net/package/ssh2
這里我們可以均下載最新版本,libssh2的源碼包為libssh2-1.6.0.tar.gz塘秦,ssh2的源碼包為ssh2-0.12.tgz陋气。
具體地址:
https://www.libssh2.org/download/libssh2-1.6.0.tar.gz
http://pecl.php.net/get/ssh2-0.12.tgz
- 解壓并安裝libssh2和ssh2。其中懒闷,libssh2需要先安裝,ssh2后安裝。安裝步驟如下:
# tar -zxvf libssh2-1.4.2.tar.gz
# cd libssh2-1.4.2
# ./configure --prefix=/usr/local/libssh2
# make && make install
以上為安裝libssh2愤估,這里需要記住libssh2的安裝目錄帮辟,因?yàn)樵诎惭bssh2的時(shí)候還會用到。
# tar -zxvf ssh2-0.12.tgz
# cd ssh2-0.12
# phpize
# ./configure --prefix=/usr/local/ssh2 --with-ssh2=/usr/local/libssh2
# make
執(zhí)行完以上過程后玩焰,在當(dāng)前目錄下的modules目錄下會生成一個(gè)ssh2.so文件由驹,這就是擴(kuò)展PHP所需要的,將該文件拷貝到PHP庫的存儲目錄下在修改PHP的配置文件即可昔园。
# cp modules/ssh2.so /usr/lib64/php/modules/
注:PHP庫的存儲目錄可能因系統(tǒng)而異蔓榄,我的在 /usr/lib64/php/modules/
# vi /etc/php.ini
向該文件中添加內(nèi)容:
extension=ssh2.so
可能遇到的問題和解決方案:
configure: error: OpenSSL Crypto library not found
或
configure: error: No crypto library found!
crypto是什么呢? 是OpenSSL 加密庫(lib), 這個(gè)庫需要 openssl-devel
包
在ubuntu中就是 libssl-dev
RedHat Fedora 平臺
yum -y install openssl-devel
Debian ,ubunu 平臺
apt-get install libssl-dev
驗(yàn)證是否安裝成功
只需要輸入:
php -m
查看列表中是否有 ssh2
即可
使用
<?php
$user="user";
$pass="password";
$connection=ssh2_connect('202.112.113.250',22);
ssh2_auth_password($connection,$user,$pass);
// 查看家目錄的命令
$cmd="ls ~";
$ret=ssh2_exec($connection,$cmd);
stream_set_blocking($ret, true);
echo (stream_get_contents($ret));
?>
為了使用方便, 封裝了一個(gè)類如下:
<?php
namespace App\Lib;
class FizzSSH
{
public static $config = [
'host' => '127.0.0.1',
'port' => '22',
'username' => 'root',
'password' => '123456'
];
/**
* 執(zhí)行操作
* @param string $cmd 執(zhí)行的命令
* @param array $config 連接配置文件, 具體參考上邊的 $config 公共變量
* @return mixed
*/
public static function run($cmd='', $config=[])
{
if (empty($config)) {
$config = static::$config;
}
// 連接服務(wù)器
$connection=ssh2_connect($config['host'], $config['port']);
// 身份驗(yàn)證
ssh2_auth_password($connection, $config['username'], $config['password']);
// 執(zhí)行命令
$ret=ssh2_exec($connection, $cmd);
// 獲取結(jié)果
stream_set_blocking($ret, true);
// 返回結(jié)果
return stream_get_contents($ret);
}
}
使用方法:
use FizzSSH;
$cmd = "mkdir -p /var/www/soft && echo 'test'>>/var/www/soft/test.txt && cat /var/www/soft/test.txt";
FizzSSH::run($cmd, $config);
完美手工~~~