如何使用PHP SSH2模块执行远程Linux命令


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 Successfuln"; } 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进行连接、执行命令、上传和下载文件等操作。它在服务器管理和部署的过程中是非常有用的。在使用该扩展时,需要特别注意错误处理,以避免出现不必要的问题。希望通过本文的介绍,您对该扩展有了更多的了解。

本文收集自互联网,如果发现有涉嫌侵权或违法违规的内容,请联系6532516@qq.com以便进行及时清除
分享到