Loading...

PHP 连接 SSH 并执行命令

有时候因为业务需要我们只能通过 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,在结尾加一行:

[code lang=”ini”]extension=php_ssh2.dll[/code]

然后重启你的 PHP 即可。

Linux 下的安装方法:

首先安装 libssh2

[code lang=”Bash”]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[/code]

然后安装 ssh2

[code lang=”Bash”]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[/code]

安装完成后,就可以看到以下输出

[code]Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/[/code]

最后那个 20170718 可能不一样,但是基本上就在那里面。

编辑你的 php.ini,在结尾加入一行

[code lang=”ini”]extension=ssh2.so[/code]

然后重启 Nginx 或者 Apache 就可以了!

连接到 SSH 服务器

以下是一段示例代码,连接到 SSH 服务器并执行命令 echo “Hello World”

[code lang=”php”]<?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”‘);[/code]

这样就可以轻松连接到服务器并执行命令了。

发表评论

》表情