有时候因为业务需要我们只能通过 SSH 来操作服务器,或者说你想写一个简单的 php 脚本帮你每天在服务器上执行一些操作之类的,那么 php 如何连接到 SSH 呢?
请接着往下看。
安装扩展
首先需要安装 php-ssh2,这是一个 PHP 的扩展,用于连接 ssh Windows 下的安装方法:
打开 http://pecl.php.net/package/ssh2 根据你自己的 PHP 版本,选择对应的扩展下载,例如我的是 PHP 7.2.9,我就选择 1.1.2 版本,右边有一个 图标,点进去就可以下载 DLL
下载完解压,把 libssh2.dll 放进 PHP 安装目录,php_ssh2.dll 放进 PHP 安装目录的 /ext/
文件夹里,然后修改你的 php.ini,在结尾加一行:
extension=php_ssh2.dll
然后重启你的 PHP 即可。
Linux 下的安装方法:
首先安装 libssh2
wget https://www.libssh2.org/download/libssh2-1.8.0.tar.gz
tar xzvf libssh2-1.8.0.tar.gz
cd libssh2-1.8.0/
./configure --prefix=/usr/local/libssh2
make && make install
然后安装 ssh2
wget http://pecl.php.net/get/ssh2-1.1.2.tgz
tar xvf ssh2-1.1.2.tgz
cd ssh2-1.1.2/
phpize
./configure --prefix=/usr/local/ssh2 --with-ssh2=/usr/local/libssh2 --with-php-config=/usr/local/php/bin/php-config
make && make install
安装完成后,就可以看到以下输出
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/
最后那个 20170718
可能不一样,但是基本上就在那里面。
编辑你的 php.ini,在结尾加入一行
extension=ssh2.so
然后重启 Nginx 或者 Apache 就可以了!
连接到 SSH 服务器
以下是一段示例代码,连接到 SSH 服务器并执行命令 echo Hello World
<?php
function runcmd($conn, $cmd) {
$stream = ssh2_exec($conn, $cmd);
stream_set_blocking($stream, true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
// Windows 下要用 iconv,不然会乱码
// return iconv("UTF-8", "GB2312//IGNORE", stream_get_contents($stream_out));
return stream_get_contents($stream_out);
}
$conn = ssh2_connect("服务器地址", 22);
ssh2_auth_password($conn, "root", "服务器密码");
echo runcmd($conn, "echo Hello World");
这样就可以轻松连接到服务器并执行命令了。
读者评论