如何使用PHP SSH2模块执行远程Linux命令
创始人
2025-07-11 20:51:31
0

PHP SSH2扩展是用于在PHP程序中使用SSH(安全壳协议)的一种扩展。它允许建立加密连接和执行远程命令、上传和下载文件等操作,十分方便实用。下面我将为大家详细介绍一下该扩展的基本用法和常见操作。

安装

libssh2 安装

libssh2 是一个开源的C语言库,用于实现SSH(Secure Shell)协议的客户端功能。它提供了一组API函数,使开发者可以在自己的应用中实现SSH客户端的功能,如远程执行命令、文件传输和端口转发等。

wget https://libssh2.org/download/libssh2-1.11.0.tar.gz

tar -zxvf libssh2-1.11.0.tar.gz

cd libssh2-1.11.0/

./configure
make
sudo make install

PHP-SSH2 安装

官方地址:https://pecl.php.net/package/ssh2

wget https://pecl.php.net/get/ssh2-1.4.tgz

tar -zxvf ssh2-1.4.tgz

cd ssh2-1.4/

/usr/local/php-8.2.14/bin/phpize

./configure --with-php-config=/usr/local/php-8.2.14/bin/php-config

make
make install

php.ini 添加扩展 ssh2.so

sudo vim /usr/local/php-8.2.14/etc/php.ini

extension=ssh2

命令行检查是否安装成功

/usr/local/php-8.2.14/bin/php -m|grep ssh2
ssh2

使用

连接远程服务器与SSH2服务器建立连接是使用PHP SSH2扩展时的第一步。它需要传递服务器地址、端口号、用户名和密码。连接成功后,您可以执行各种远程操作。以下是一个简单的连接示例:

用户名和密码

$connection = ssh2_connect('tinywan.com', 22);
$res = ssh2_auth_password($connection, "username", "password");
if ($res) {
    echo "Authentication Successful! ";
} else {
    echo "Authentication Failed! ";
    exit(255);
}

SSH 密钥

$connection = ssh2_connect('192.168.1.204', 22, ['hostkey' => 'ssh-rsa']);
$res = ssh2_auth_pubkey_file($connection, 'tinywan','/home/tinywan/.ssh/id_rsa.pub','/home/tinywan/.ssh/id_rsa');
if ($res) {
    echo "Public Key Authentication Successful\n";
} else {
    echo('Public Key Authentication Failed');
}

在此示例中,我们成功地连接到端口22上的tinywan.com服务器,并传递了正确的用户名和密码。远程执行命令 该扩展最常见的用途之一是在远程服务器上执行命令。

以下是一个使用ssh2_exec()函数执行命令并打印输出的示例:

$connection = ssh2_connect('tinywan.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$stream = ssh2_exec($connection, 'ls -l');
stream_set_blocking($stream, true);
echo stream_get_contents($stream);

在此例子中,我们首先与服务器建立连接,然后使用ssh2_exec()在服务器上执行ls -l命令。我们通过stream_set_blocking()将流设置为阻塞模式,并使用stream_get_contents()获取流中的所有内容。输出打印为远程命令的执行结果。上传和下载文件 该扩展还允许您在服务器和本地计算机之间上传和下载文件。在本例中,我们将使用ssh2_scp_send()和ssh2_scp_recv()函数。

$connection = ssh2_connect('tinywan.com', 22);
ssh2_auth_password($connection, 'username', 'password');
ssh2_scp_send($connection, '/local_file', '/remote_file');
ssh2_scp_recv($connection, '/remote_file', '/local_file');

在此示例中,我们使用ssh2_scp_send()函数将本地文件/local_file上传到远程服务器上的/remote_file路径。然而,我们也可以使用ssh2_scp_recv()函数从远程服务器下载文件到本地。错误处理 当使用PHP SSH2扩展时,您需要处理错误。在连接、执行、上传和下载操作失败时,该扩展将会返回错误代码和错误信息,以帮助您了解失败的原因。以下是一个错误处理的示例:

$connection = ssh2_connect('tinywan.com', 22);
if (!$connection) {
    die('Connection failed.');
}
$auth = ssh2_auth_password($connection, 'username', 'password');
if (!$auth) {
    die('Authentication failed.');
}

使用if语句检查ssh2_connect()和ssh2_auth_password()函数是否成功执行。如果这两个函数中的任何一个出现错误,它将抛出一个失败信息并终止脚本的执行。

总结 PHP SSH2扩展为用户提供了一种简便的方法,在PHP程序中使用SSH进行连接、执行命令、上传和下载文件等操作。它在服务器管理和部署的过程中是非常有用的。在使用该扩展时,需要特别注意错误处理,以避免出现不必要的问题。希望通过本文的介绍,您对该扩展有了更多的了解。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
范例解读VB.NET获取环境变... VB.NET编程语言的使用范围非常广泛,可以帮助开发人员处理各种程序中的需求,而且还能对移动设备进行...
规避非法攻击 用好路由器远程管... 单位在市区不同位置设立了科技服务点,每一个服务点的员工都通过宽带路由器进行共享上网,和单位网络保持联...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...