如何使用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.gztar -zxvf libssh2-1.11.0.tar.gzcd libssh2-1.11.0/./configuremakesudo make installPHP-SSH2 安装官方地址:https://pecl.php.NET/package/ssh2
wget https://pecl.php.net/get/ssh2-1.4.tgztar -zxvf ssh2-1.4.tgzcd ssh2-1.4//usr/local/php-8.2.14/bin/phpize./configure --with-php-config=/usr/local/php-8.2.14/bin/php-configmakemake installphp.ini 添加扩展 ssh2.so
sudo vim /usr/local/php-8.2.14/etc/php.ini
extension=ssh2
【如何使用PHP SSH2模块执行远程Linux命令】命令行检查是否安装成功
/usr/local/php-8.2.14/bin/php -m|grep ssh2ssh2使用连接远程服务器与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进行连接、执行命令、上传和下载文件等操作 。它在服务器管理和部署的过程中是非常有用的 。在使用该扩展时,需要特别注意错误处理,以避免出现不必要的问题 。希望通过本文的介绍,您对该扩展有了更多的了解 。




    推荐阅读