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

2024-01-29 16:08:49 浏览数 (1)

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

安装

libssh2 安装

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

代码语言:javascript复制
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

代码语言:javascript复制
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

代码语言:javascript复制
extension=ssh2

命令行检查是否安装成功

代码语言:javascript复制
/usr/local/php-8.2.14/bin/php -m|grep ssh2
ssh2

使用

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

用户名和密码

代码语言:javascript复制
$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 密钥

代码语言:javascript复制
$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()函数执行命令并打印输出的示例:

代码语言:javascript复制
$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()函数。

代码语言:javascript复制
$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扩展时,您需要处理错误。在连接、执行、上传和下载操作失败时,该扩展将会返回错误代码和错误信息,以帮助您了解失败的原因。以下是一个错误处理的示例:

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

0 人点赞