如何通过PHP连接远程SSH服务器并执行命令
PHP连接SSH服务器并执行命令的实现方案
方案1:使用PHP SSH2扩展(需要提前安装扩展)
安装扩展
- Debian/Ubuntu系统执行:
apt install php-ssh2 - CentOS/RHEL系统执行:
yum install php-pecl-ssh2 - 通用安装方式:
pecl install ssh2
安装完成后重启PHP服务即可生效。
示例代码
<?php // 建立SSH连接,默认端口为22 $sshConn = ssh2_connect('xx.xxxx.xxx', 22); if (!$sshConn) { die('无法建立SSH连接,请检查IP、端口及服务器防火墙设置'); } // 密码认证登录 if (!ssh2_auth_password($sshConn, 'root', 'xxx12333')) { die('SSH登录失败,用户名或密码错误'); } // 执行需要的命令,示例为查看当前目录文件 $execStream = ssh2_exec($sshConn, 'ls -la'); stream_set_blocking($execStream, true); // 读取命令返回结果 $result = stream_get_contents($execStream); fclose($execStream); // 输出结果 echo $result; // 断开SSH连接 ssh2_disconnect($sshConn); ?>
方案2:使用phpseclib纯PHP库(无需安装扩展)
适合没有服务器权限安装PHP扩展的场景,通过Composer即可引入使用。
安装依赖
执行命令:composer require phpseclib/phpseclib:^3.0
示例代码
<?php use phpseclib3\Net\SSH2; // 引入Composer自动加载文件 require __DIR__ . '/vendor/autoload.php'; // 初始化SSH对象 $ssh = new SSH2('xx.xxxx.xxx', 22); if (!$ssh->login('root', 'xxx12333')) { die('SSH登录验证失败'); } // 执行命令并直接输出结果 echo $ssh->exec('ls -la'); // 执行多条命令示例 $ssh->write("cd /var/www \n"); $ssh->write("pwd \n"); echo $ssh->read(); ?>
注意事项
shell_exec()是PHP用来执行本地服务器Shell命令的函数,本身不支持远程SSH连接,因此你之前的尝试无法生效是正常情况- 生产环境不建议硬编码SSH账号密码,可通过环境变量、加密配置文件等方式存储敏感信息
- 建议优先使用SSH密钥认证替代密码认证,两种方案均支持密钥登录的配置
内容的提问来源于stack exchange,提问作者Tharusha Thishakya
相关产品推荐
相关产品推荐

